[RK3568][Android11][NFC] NP7160移植调试

1.驱动调试

1.1 NfcFactoryTestApp测试程序

配置完驱动,可以先用测试程序NfcFactoryTestApp试一下nfc通讯是否成

1.先关闭adb shell svc nfc disable

2 ./NfcFactoryTestApp

1.2 也可以在驱动里添加nfc i2c通讯检测

drivers/nfc/nfc/i2c_drv.c

@@ -101,6 +101,47 @@ static irqreturn_t i2c_irq_handler(int irq, void *dev_id)
        return IRQ_HANDLED;
 }
 
+//start add detect nfc ic func by lpz 20230926
+static int nfc_i2c_test(struct i2c_client *client){
+       int ret;
+       char NCICoreReset[] = {0x20, 0x00, 0x01, 0x01};
+       char NCIEnableStandby[] = {0x2F, 0x00, 0x01, 0x01};
+       char Answer[256];
+
+       ret = i2c_master_send(client, NCICoreReset,4);
+       if (ret <= 0) {
+               printk("[lpz]%s: write NCICoreReset failed ret(%d), maybe in standby\n",__func__, ret);
+               return ret;
+       }else{
+               printk("[lpz]%s: write NCICoreReset succeed, ret(%d)\n",__func__, ret);
+       }
+       msleep(100);
+
+       ret = i2c_master_send(client, NCIEnableStandby,4);
+       if (ret <= 0) {
+               printk("[lpz]%s: write NCIEnableStandby failed ret(%d), maybe in standby\n",__func__, ret);
+               return ret;
+       }else{
+               printk("[lpz]%s: write NCIEnableStandby succeed, ret(%d)\n",__func__, ret);
+       }
+       msleep(10);
+
+       /* Read data, Answer[0] = 0x40*/
+       memset(Answer, 0, sizeof(Answer));
+       ret = i2c_master_recv(client, Answer, 256);
+       printk("[lpz]%s: Read Answer[0]=0x%x, Answer[1]=0x%x, Answer[2]=0x%x, Answer[3]=0x%x, ret(%d)\n",
+                               __func__, Answer[0],Answer[1],Answer[2],Answer[3],ret);
+       if(ret>0 && Answer[0]!=0x00){
+               printk("[lpz]%s: NXP NFC controller detected succeed\n",__func__);
+               return 1;
+       }else{
+               printk("[lpz]%s: NXP NFC controller detected failed\n",__func__);
+               return -1;
+       }
+       return 1;
+}
+//end add detect nfc ic func by lpz 20230926
+
 int i2c_read(struct nfc_dev *nfc_dev, char *buf, size_t count, int timeout)
 {
        int ret;
@@ -361,31 +402,11 @@ int nfc_i2c_dev_probe(struct i2c_client *client, const struct i2c_device_id *id)
                goto err_free_gpio;
        }
        client->irq = ret;
        ret = configure_gpio(nfc_gpio->dwl_req, GPIO_OUTPUT);
        if (ret) {
                pr_err("%s: unable to request nfc firm downl gpio [%d]\n",
                       __func__, nfc_gpio->dwl_req);
        }
 
        /* copy the retrieved gpio details from DT */
        memcpy(&nfc_dev->configs, &nfc_configs,
@@ -413,15 +434,32 @@ int nfc_i2c_dev_probe(struct i2c_client *client, const struct i2c_device_id *id)
                goto err_nfc_misc_unregister;
        }
        i2c_disable_irq(nfc_dev);
+       set_valid_gpio(nfc_gpio->dwl_req, 0);
        gpio_set_ven(nfc_dev, 1);
        gpio_set_ven(nfc_dev, 0);
+       msleep(10);
        gpio_set_ven(nfc_dev, 1);
+       msleep(100);
        device_init_wakeup(&client->dev, true);
        i2c_set_clientdata(client, nfc_dev);
        i2c_dev->irq_wake_up = false;
+//start add detect nfc ic func by lpz 20230926
+       ret = nfc_i2c_test(client);
+       if(ret > 0){
+               printk("[lpz]%s: nfc_i2c_test ok\n",__func__);
+       }else{
+               printk("[lpz]%s: nfc_i2c_test fail\n",__func__);
+               goto i2c_test_fail;
+       }
+//end add detect nfc ic func by lpz 20230926
 
-       pr_info("%s: probing nfc i2c successfully\n", __func__);
+       pr_info("%s: probing i2c nfc-np7160 successfully\n", __func__);
        return 0;
+i2c_test_fail:
 err_nfc_misc_unregister:
        nfc_misc_unregister(nfc_dev, DEV_COUNT);
 err_mutex_destroy:
@@ -437,7 +475,7 @@ err_free_read_kbuf:
 err_free_nfc_dev:
        kfree(nfc_dev);
 err:
-       pr_err("%s: probing not successful, check hardware\n", __func__);
+       pr_err("%s: probing i2c nfc-np7160 fail, check hardware!!!\n", __func__);
        return ret;
 }

2.Android层移植

Manifest.xml编译FCM Version报错不通过

报错如下:

patch:

--- a/device/rockchip/common/manifest.xml
+++ b/device/rockchip/common/manifest.xml
@@ -66,6 +66,24 @@
             <instance>default</instance>
         </interface>
     </hal>
+    <hal format="hidl">
+        <name>android.hardware.nfc</name>
+        <transport>hwbinder</transport>
+        <version>1.2</version>
+        <interface>
+            <name>INfc</name>
+            <instance>default</instance>
+        </interface>
+    </hal>
+    <hal format="hidl">
+        <name>vendor.nxp.nxpnfc</name>
+        <transport>hwbinder</transport>
+        <version>1.0</version>
+        <interface>
+            <name>INxpNfc</name>
+            <instance>default</instance>
+        </interface>
+    </hal>

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值