diff options
Diffstat (limited to 'drivers/i2c/chips/pcf8574.c')
| -rw-r--r-- | drivers/i2c/chips/pcf8574.c | 22 |
1 files changed, 17 insertions, 5 deletions
diff --git a/drivers/i2c/chips/pcf8574.c b/drivers/i2c/chips/pcf8574.c index c3e6449c4481..32b25427eaba 100644 --- a/drivers/i2c/chips/pcf8574.c +++ b/drivers/i2c/chips/pcf8574.c | |||
| @@ -105,6 +105,16 @@ static ssize_t set_write(struct device *dev, struct device_attribute *attr, cons | |||
| 105 | 105 | ||
| 106 | static DEVICE_ATTR(write, S_IWUSR | S_IRUGO, show_write, set_write); | 106 | static DEVICE_ATTR(write, S_IWUSR | S_IRUGO, show_write, set_write); |
| 107 | 107 | ||
| 108 | static struct attribute *pcf8574_attributes[] = { | ||
| 109 | &dev_attr_read.attr, | ||
| 110 | &dev_attr_write.attr, | ||
| 111 | NULL | ||
| 112 | }; | ||
| 113 | |||
| 114 | static const struct attribute_group pcf8574_attr_group = { | ||
| 115 | .attrs = pcf8574_attributes, | ||
| 116 | }; | ||
| 117 | |||
| 108 | /* | 118 | /* |
| 109 | * Real code | 119 | * Real code |
| 110 | */ | 120 | */ |
| @@ -166,13 +176,13 @@ static int pcf8574_detect(struct i2c_adapter *adapter, int address, int kind) | |||
| 166 | pcf8574_init_client(new_client); | 176 | pcf8574_init_client(new_client); |
| 167 | 177 | ||
| 168 | /* Register sysfs hooks */ | 178 | /* Register sysfs hooks */ |
| 169 | device_create_file(&new_client->dev, &dev_attr_read); | 179 | err = sysfs_create_group(&new_client->dev.kobj, &pcf8574_attr_group); |
| 170 | device_create_file(&new_client->dev, &dev_attr_write); | 180 | if (err) |
| 181 | goto exit_detach; | ||
| 171 | return 0; | 182 | return 0; |
| 172 | 183 | ||
| 173 | /* OK, this is not exactly good programming practice, usually. But it is | 184 | exit_detach: |
| 174 | very code-efficient in this case. */ | 185 | i2c_detach_client(new_client); |
| 175 | |||
| 176 | exit_free: | 186 | exit_free: |
| 177 | kfree(data); | 187 | kfree(data); |
| 178 | exit: | 188 | exit: |
| @@ -183,6 +193,8 @@ static int pcf8574_detach_client(struct i2c_client *client) | |||
| 183 | { | 193 | { |
| 184 | int err; | 194 | int err; |
| 185 | 195 | ||
| 196 | sysfs_remove_group(&client->dev.kobj, &pcf8574_attr_group); | ||
| 197 | |||
| 186 | if ((err = i2c_detach_client(client))) | 198 | if ((err = i2c_detach_client(client))) |
| 187 | return err; | 199 | return err; |
| 188 | 200 | ||
