diff options
Diffstat (limited to 'drivers/i2c/chips/pca9539.c')
-rw-r--r-- | drivers/i2c/chips/pca9539.c | 23 |
1 files changed, 16 insertions, 7 deletions
diff --git a/drivers/i2c/chips/pca9539.c b/drivers/i2c/chips/pca9539.c index 54b6e6a4beed..f43c4e79b55e 100644 --- a/drivers/i2c/chips/pca9539.c +++ b/drivers/i2c/chips/pca9539.c | |||
@@ -134,11 +134,13 @@ static int pca9539_detect(struct i2c_adapter *adapter, int address, int kind) | |||
134 | new_client->driver = &pca9539_driver; | 134 | new_client->driver = &pca9539_driver; |
135 | new_client->flags = 0; | 135 | new_client->flags = 0; |
136 | 136 | ||
137 | /* Detection: the pca9539 only has 8 registers (0-7). | 137 | if (kind < 0) { |
138 | A read of 7 should succeed, but a read of 8 should fail. */ | 138 | /* Detection: the pca9539 only has 8 registers (0-7). |
139 | if ((i2c_smbus_read_byte_data(new_client, 7) < 0) || | 139 | A read of 7 should succeed, but a read of 8 should fail. */ |
140 | (i2c_smbus_read_byte_data(new_client, 8) >= 0)) | 140 | if ((i2c_smbus_read_byte_data(new_client, 7) < 0) || |
141 | goto exit_kfree; | 141 | (i2c_smbus_read_byte_data(new_client, 8) >= 0)) |
142 | goto exit_kfree; | ||
143 | } | ||
142 | 144 | ||
143 | strlcpy(new_client->name, "pca9539", I2C_NAME_SIZE); | 145 | strlcpy(new_client->name, "pca9539", I2C_NAME_SIZE); |
144 | 146 | ||
@@ -146,11 +148,16 @@ static int pca9539_detect(struct i2c_adapter *adapter, int address, int kind) | |||
146 | if ((err = i2c_attach_client(new_client))) | 148 | if ((err = i2c_attach_client(new_client))) |
147 | goto exit_kfree; | 149 | goto exit_kfree; |
148 | 150 | ||
149 | /* Register sysfs hooks (don't care about failure) */ | 151 | /* Register sysfs hooks */ |
150 | sysfs_create_group(&new_client->dev.kobj, &pca9539_defattr_group); | 152 | err = sysfs_create_group(&new_client->dev.kobj, |
153 | &pca9539_defattr_group); | ||
154 | if (err) | ||
155 | goto exit_detach; | ||
151 | 156 | ||
152 | return 0; | 157 | return 0; |
153 | 158 | ||
159 | exit_detach: | ||
160 | i2c_detach_client(new_client); | ||
154 | exit_kfree: | 161 | exit_kfree: |
155 | kfree(data); | 162 | kfree(data); |
156 | exit: | 163 | exit: |
@@ -161,6 +168,8 @@ static int pca9539_detach_client(struct i2c_client *client) | |||
161 | { | 168 | { |
162 | int err; | 169 | int err; |
163 | 170 | ||
171 | sysfs_remove_group(&client->dev.kobj, &pca9539_defattr_group); | ||
172 | |||
164 | if ((err = i2c_detach_client(client))) | 173 | if ((err = i2c_detach_client(client))) |
165 | return err; | 174 | return err; |
166 | 175 | ||