Mako: NFC: Return proper error code from address change ioctl.

We're tracking a problem where NFC on Mako does not come up
sometimes. As a software workaround, we want to retry the
reset procedure a few times. Since the user-space stack
calls the address change ioctl first on Mako (which
does some i2c writes), return error code from that
ioctl so we can see if NFC didn't come up.

Bug: 7258919
Change-Id: I01584a69cb294134d5bd3c16b4b15b56739c4fe3
Signed-off-by: Martijn Coenen <maco@google.com>
diff --git a/drivers/nfc/bcm2079x-i2c.c b/drivers/nfc/bcm2079x-i2c.c
index d719409..2059e4a 100644
--- a/drivers/nfc/bcm2079x-i2c.c
+++ b/drivers/nfc/bcm2079x-i2c.c
@@ -101,20 +101,17 @@
  */
 #define ALIAS_ADDRESS	  0x79
 
-static void change_client_addr(struct bcm2079x_dev *bcm2079x_dev, int addr)
+static int change_client_addr(struct bcm2079x_dev *bcm2079x_dev, int addr)
 {
 	struct i2c_client *client;
 	int ret;
 	int i;
-	int offset = 0;
 	char addr_data[] = {
 		0xFA, 0xF2, 0x00, 0x00, 0x00, 0x38, 0x00, 0x00, 0x00, 0x2A
 	};
-
 	client = bcm2079x_dev->client;
 	client->addr = ALIAS_ADDRESS;
 	client->flags &= ~I2C_CLIENT_TEN;
-	offset = 0;
 
 	addr_data[5] = addr & 0xFF;
 	ret = 0;
@@ -126,8 +123,8 @@
 		 "%04x, addr_data[%d] = %02x\n",
 		 client->addr, client->flags, sizeof(addr_data) - 1,
 		 addr_data[sizeof(addr_data) - 1]);
-	ret = i2c_master_send(client, addr_data+offset, sizeof(addr_data)-offset);
-	if (ret != sizeof(addr_data)-offset) {
+	ret = i2c_master_send(client, addr_data, sizeof(addr_data));
+	if (ret != sizeof(addr_data)) {
 		client->addr = ALIAS_ADDRESS;
 		client->flags &= ~I2C_CLIENT_TEN;
 		dev_info(&client->dev,
@@ -142,6 +139,8 @@
 	dev_info(&client->dev,
 		 "Change client device changed to (0x%04X) flag = %04x, ret = %d\n",
 		 client->addr, client->flags, ret);
+
+    return (ret == sizeof(addr_data) ? 0 : -EIO);
 }
 
 static irqreturn_t bcm2079x_dev_irq_handler(int irq, void *dev_id)
@@ -300,8 +299,7 @@
 		dev_info(&bcm2079x_dev->client->dev,
 			 "%s, BCMNFC_CHANGE_ADDR (%x, %lx):\n", __func__, cmd,
 			 arg);
-		change_client_addr(bcm2079x_dev, arg);
-		break;
+		return change_client_addr(bcm2079x_dev, arg);
 	case BCMNFC_POWER_CTL:
 		gpio_set_value(bcm2079x_dev->en_gpio, arg);
 		break;