blob: fb84ff36bd69012240f814002b98627f1a72194e [file] [log] [blame]
Linus Torvalds1da177e2005-04-16 15:20:36 -07001/* i2c-core.c - a device driver for the iic-bus interface */
2/* ------------------------------------------------------------------------- */
3/* Copyright (C) 1995-99 Simon G. Vogl
4
5 This program is free software; you can redistribute it and/or modify
6 it under the terms of the GNU General Public License as published by
7 the Free Software Foundation; either version 2 of the License, or
8 (at your option) any later version.
9
10 This program is distributed in the hope that it will be useful,
11 but WITHOUT ANY WARRANTY; without even the implied warranty of
12 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
13 GNU General Public License for more details.
14
15 You should have received a copy of the GNU General Public License
16 along with this program; if not, write to the Free Software
Jean Delvare5694f8a2012-03-26 21:47:19 +020017 Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
18 MA 02110-1301 USA. */
Linus Torvalds1da177e2005-04-16 15:20:36 -070019/* ------------------------------------------------------------------------- */
20
Jan Engelhardt96de0e22007-10-19 23:21:04 +020021/* With some changes from Kyösti Mälkki <kmalkki@cc.hut.fi>.
Linus Torvalds1da177e2005-04-16 15:20:36 -070022 All SMBus-related things are written by Frodo Looijaard <frodol@dds.nl>
Jean Delvare421ef472005-10-26 21:28:55 +020023 SMBus 2.0 support by Mark Studebaker <mdsxyz123@yahoo.com> and
Jean Delvare7c81c602014-01-29 20:40:08 +010024 Jean Delvare <jdelvare@suse.de>
Michael Lawnick08263742010-08-11 18:21:02 +020025 Mux support by Rodolfo Giometti <giometti@enneenne.com> and
Wolfram Sang687b81d2013-07-11 12:56:15 +010026 Michael Lawnick <michael.lawnick.ext@nsn.com>
27 OF support is copyright (c) 2008 Jochen Friedrich <jochen@scram.de>
28 (based on a previous patch from Jon Smirl <jonsmirl@gmail.com>) and
29 (c) 2013 Wolfram Sang <wsa@the-dreams.de>
30 */
Linus Torvalds1da177e2005-04-16 15:20:36 -070031
Linus Torvalds1da177e2005-04-16 15:20:36 -070032#include <linux/module.h>
33#include <linux/kernel.h>
Viresh Kumar5f9296b2012-02-28 18:26:31 +053034#include <linux/delay.h>
Linus Torvalds1da177e2005-04-16 15:20:36 -070035#include <linux/errno.h>
Viresh Kumar5f9296b2012-02-28 18:26:31 +053036#include <linux/gpio.h>
Linus Torvalds1da177e2005-04-16 15:20:36 -070037#include <linux/slab.h>
38#include <linux/i2c.h>
39#include <linux/init.h>
40#include <linux/idr.h>
Arjan van de Venb3585e42006-01-11 10:50:26 +010041#include <linux/mutex.h>
Wolfram Sang687b81d2013-07-11 12:56:15 +010042#include <linux/of.h>
Grant Likely959e85f2010-06-08 07:48:19 -060043#include <linux/of_device.h>
Wolfram Sang687b81d2013-07-11 12:56:15 +010044#include <linux/of_irq.h>
Jean Delvareb8d6f452007-02-13 22:09:00 +010045#include <linux/completion.h>
Mike Rapoportcea443a2008-01-27 18:14:50 +010046#include <linux/hardirq.h>
47#include <linux/irqflags.h>
Rodolfo Giomettif18c41d2009-06-19 16:58:20 +020048#include <linux/rwsem.h>
Mark Brown6de468a2010-03-02 12:23:46 +010049#include <linux/pm_runtime.h>
Mika Westerberg907ddf82012-11-23 12:23:40 +010050#include <linux/acpi.h>
Linus Torvalds1da177e2005-04-16 15:20:36 -070051#include <asm/uaccess.h>
52
David Brownell9c1600e2007-05-01 23:26:31 +020053#include "i2c-core.h"
54
Linus Torvalds1da177e2005-04-16 15:20:36 -070055
Jean Delvare6629dcf2010-05-04 11:09:28 +020056/* core_lock protects i2c_adapter_idr, and guarantees
Jean Delvare35fc37f2009-06-19 16:58:19 +020057 that device detection, deletion of detected devices, and attach_adapter
Lars-Peter Clausen19baba42013-03-09 08:16:44 +000058 calls are serialized */
Jean Delvarecaada322008-01-27 18:14:49 +010059static DEFINE_MUTEX(core_lock);
Linus Torvalds1da177e2005-04-16 15:20:36 -070060static DEFINE_IDR(i2c_adapter_idr);
61
Jean Delvare4f8cf822009-09-18 22:45:46 +020062static struct device_type i2c_client_type;
Jean Delvare4735c982008-07-14 22:38:36 +020063static int i2c_detect(struct i2c_adapter *adapter, struct i2c_driver *driver);
David Brownellf37dd802007-02-13 22:09:00 +010064
65/* ------------------------------------------------------------------------- */
66
Jean Delvared2653e92008-04-29 23:11:39 +020067static const struct i2c_device_id *i2c_match_id(const struct i2c_device_id *id,
68 const struct i2c_client *client)
69{
70 while (id->name[0]) {
71 if (strcmp(client->name, id->name) == 0)
72 return id;
73 id++;
74 }
75 return NULL;
76}
77
Linus Torvalds1da177e2005-04-16 15:20:36 -070078static int i2c_device_match(struct device *dev, struct device_driver *drv)
79{
Jean Delvare51298d12009-09-18 22:45:45 +020080 struct i2c_client *client = i2c_verify_client(dev);
81 struct i2c_driver *driver;
David Brownell7b4fbc52007-05-01 23:26:30 +020082
Jean Delvare51298d12009-09-18 22:45:45 +020083 if (!client)
84 return 0;
85
Grant Likely959e85f2010-06-08 07:48:19 -060086 /* Attempt an OF style match */
87 if (of_driver_match_device(dev, drv))
88 return 1;
89
Mika Westerberg907ddf82012-11-23 12:23:40 +010090 /* Then ACPI style match */
91 if (acpi_driver_match_device(dev, drv))
92 return 1;
93
Jean Delvare51298d12009-09-18 22:45:45 +020094 driver = to_i2c_driver(drv);
Jean Delvared2653e92008-04-29 23:11:39 +020095 /* match on an id table if there is one */
96 if (driver->id_table)
97 return i2c_match_id(driver->id_table, client) != NULL;
98
Jean Delvareeb8a7902008-05-18 20:49:41 +020099 return 0;
Linus Torvalds1da177e2005-04-16 15:20:36 -0700100}
101
David Brownell7b4fbc52007-05-01 23:26:30 +0200102
103/* uevent helps with hotplug: modprobe -q $(MODALIAS) */
Kay Sievers7eff2e72007-08-14 15:15:12 +0200104static int i2c_device_uevent(struct device *dev, struct kobj_uevent_env *env)
David Brownell7b4fbc52007-05-01 23:26:30 +0200105{
106 struct i2c_client *client = to_i2c_client(dev);
David Brownell7b4fbc52007-05-01 23:26:30 +0200107
Jean Delvareeb8a7902008-05-18 20:49:41 +0200108 if (add_uevent_var(env, "MODALIAS=%s%s",
109 I2C_MODULE_PREFIX, client->name))
110 return -ENOMEM;
David Brownell7b4fbc52007-05-01 23:26:30 +0200111 dev_dbg(dev, "uevent\n");
112 return 0;
113}
114
Viresh Kumar5f9296b2012-02-28 18:26:31 +0530115/* i2c bus recovery routines */
116static int get_scl_gpio_value(struct i2c_adapter *adap)
117{
118 return gpio_get_value(adap->bus_recovery_info->scl_gpio);
119}
120
121static void set_scl_gpio_value(struct i2c_adapter *adap, int val)
122{
123 gpio_set_value(adap->bus_recovery_info->scl_gpio, val);
124}
125
126static int get_sda_gpio_value(struct i2c_adapter *adap)
127{
128 return gpio_get_value(adap->bus_recovery_info->sda_gpio);
129}
130
131static int i2c_get_gpios_for_recovery(struct i2c_adapter *adap)
132{
133 struct i2c_bus_recovery_info *bri = adap->bus_recovery_info;
134 struct device *dev = &adap->dev;
135 int ret = 0;
136
137 ret = gpio_request_one(bri->scl_gpio, GPIOF_OPEN_DRAIN |
138 GPIOF_OUT_INIT_HIGH, "i2c-scl");
139 if (ret) {
140 dev_warn(dev, "Can't get SCL gpio: %d\n", bri->scl_gpio);
141 return ret;
142 }
143
144 if (bri->get_sda) {
145 if (gpio_request_one(bri->sda_gpio, GPIOF_IN, "i2c-sda")) {
146 /* work without SDA polling */
147 dev_warn(dev, "Can't get SDA gpio: %d. Not using SDA polling\n",
148 bri->sda_gpio);
149 bri->get_sda = NULL;
150 }
151 }
152
153 return ret;
154}
155
156static void i2c_put_gpios_for_recovery(struct i2c_adapter *adap)
157{
158 struct i2c_bus_recovery_info *bri = adap->bus_recovery_info;
159
160 if (bri->get_sda)
161 gpio_free(bri->sda_gpio);
162
163 gpio_free(bri->scl_gpio);
164}
165
166/*
167 * We are generating clock pulses. ndelay() determines durating of clk pulses.
168 * We will generate clock with rate 100 KHz and so duration of both clock levels
169 * is: delay in ns = (10^6 / 100) / 2
170 */
171#define RECOVERY_NDELAY 5000
172#define RECOVERY_CLK_CNT 9
173
174static int i2c_generic_recovery(struct i2c_adapter *adap)
175{
176 struct i2c_bus_recovery_info *bri = adap->bus_recovery_info;
177 int i = 0, val = 1, ret = 0;
178
179 if (bri->prepare_recovery)
180 bri->prepare_recovery(bri);
181
182 /*
183 * By this time SCL is high, as we need to give 9 falling-rising edges
184 */
185 while (i++ < RECOVERY_CLK_CNT * 2) {
186 if (val) {
187 /* Break if SDA is high */
188 if (bri->get_sda && bri->get_sda(adap))
189 break;
190 /* SCL shouldn't be low here */
191 if (!bri->get_scl(adap)) {
192 dev_err(&adap->dev,
193 "SCL is stuck low, exit recovery\n");
194 ret = -EBUSY;
195 break;
196 }
197 }
198
199 val = !val;
200 bri->set_scl(adap, val);
201 ndelay(RECOVERY_NDELAY);
202 }
203
204 if (bri->unprepare_recovery)
205 bri->unprepare_recovery(bri);
206
207 return ret;
208}
209
210int i2c_generic_scl_recovery(struct i2c_adapter *adap)
211{
212 adap->bus_recovery_info->set_scl(adap, 1);
213 return i2c_generic_recovery(adap);
214}
215
216int i2c_generic_gpio_recovery(struct i2c_adapter *adap)
217{
218 int ret;
219
220 ret = i2c_get_gpios_for_recovery(adap);
221 if (ret)
222 return ret;
223
224 ret = i2c_generic_recovery(adap);
225 i2c_put_gpios_for_recovery(adap);
226
227 return ret;
228}
229
230int i2c_recover_bus(struct i2c_adapter *adap)
231{
232 if (!adap->bus_recovery_info)
233 return -EOPNOTSUPP;
234
235 dev_dbg(&adap->dev, "Trying i2c bus recovery\n");
236 return adap->bus_recovery_info->recover_bus(adap);
237}
238
Linus Torvalds1da177e2005-04-16 15:20:36 -0700239static int i2c_device_probe(struct device *dev)
240{
Jean Delvare51298d12009-09-18 22:45:45 +0200241 struct i2c_client *client = i2c_verify_client(dev);
242 struct i2c_driver *driver;
Hans Verkuil50c33042008-03-12 14:15:00 +0100243 int status;
David Brownell7b4fbc52007-05-01 23:26:30 +0200244
Jean Delvare51298d12009-09-18 22:45:45 +0200245 if (!client)
246 return 0;
247
248 driver = to_i2c_driver(dev->driver);
Jean Delvaree0457442008-07-14 22:38:30 +0200249 if (!driver->probe || !driver->id_table)
David Brownell7b4fbc52007-05-01 23:26:30 +0200250 return -ENODEV;
Lars-Peter Clausen0acc2b32013-09-29 10:51:06 +0200251
Marc Pignatee354252008-08-28 08:33:22 +0200252 if (!device_can_wakeup(&client->dev))
253 device_init_wakeup(&client->dev,
254 client->flags & I2C_CLIENT_WAKE);
David Brownell7b4fbc52007-05-01 23:26:30 +0200255 dev_dbg(dev, "probe\n");
Jean Delvared2653e92008-04-29 23:11:39 +0200256
Lv Zhenga76e9bd2013-10-10 13:28:47 +0300257 acpi_dev_pm_attach(&client->dev, true);
Jean Delvaree0457442008-07-14 22:38:30 +0200258 status = driver->probe(client, i2c_match_id(driver->id_table, client));
Wolfram Sange4a7b9b2010-05-04 11:09:27 +0200259 if (status) {
Wolfram Sange4a7b9b2010-05-04 11:09:27 +0200260 i2c_set_clientdata(client, NULL);
Lv Zhenga76e9bd2013-10-10 13:28:47 +0300261 acpi_dev_pm_detach(&client->dev, true);
Wolfram Sange4a7b9b2010-05-04 11:09:27 +0200262 }
Hans Verkuil50c33042008-03-12 14:15:00 +0100263 return status;
Linus Torvalds1da177e2005-04-16 15:20:36 -0700264}
265
266static int i2c_device_remove(struct device *dev)
267{
Jean Delvare51298d12009-09-18 22:45:45 +0200268 struct i2c_client *client = i2c_verify_client(dev);
David Brownella1d9e6e2007-05-01 23:26:30 +0200269 struct i2c_driver *driver;
270 int status;
271
Jean Delvare51298d12009-09-18 22:45:45 +0200272 if (!client || !dev->driver)
David Brownella1d9e6e2007-05-01 23:26:30 +0200273 return 0;
274
275 driver = to_i2c_driver(dev->driver);
276 if (driver->remove) {
277 dev_dbg(dev, "remove\n");
278 status = driver->remove(client);
279 } else {
280 dev->driver = NULL;
281 status = 0;
282 }
Lars-Peter Clausen0acc2b32013-09-29 10:51:06 +0200283 if (status == 0)
Wolfram Sange4a7b9b2010-05-04 11:09:27 +0200284 i2c_set_clientdata(client, NULL);
Lv Zhenga76e9bd2013-10-10 13:28:47 +0300285 acpi_dev_pm_detach(&client->dev, true);
David Brownella1d9e6e2007-05-01 23:26:30 +0200286 return status;
Linus Torvalds1da177e2005-04-16 15:20:36 -0700287}
288
David Brownellf37dd802007-02-13 22:09:00 +0100289static void i2c_device_shutdown(struct device *dev)
290{
Jean Delvare51298d12009-09-18 22:45:45 +0200291 struct i2c_client *client = i2c_verify_client(dev);
David Brownellf37dd802007-02-13 22:09:00 +0100292 struct i2c_driver *driver;
293
Jean Delvare51298d12009-09-18 22:45:45 +0200294 if (!client || !dev->driver)
David Brownellf37dd802007-02-13 22:09:00 +0100295 return;
296 driver = to_i2c_driver(dev->driver);
297 if (driver->shutdown)
Jean Delvare51298d12009-09-18 22:45:45 +0200298 driver->shutdown(client);
David Brownellf37dd802007-02-13 22:09:00 +0100299}
300
Rafael J. Wysocki2f60ba72010-05-10 23:09:30 +0200301#ifdef CONFIG_PM_SLEEP
302static int i2c_legacy_suspend(struct device *dev, pm_message_t mesg)
David Brownellf37dd802007-02-13 22:09:00 +0100303{
Jean Delvare51298d12009-09-18 22:45:45 +0200304 struct i2c_client *client = i2c_verify_client(dev);
David Brownellf37dd802007-02-13 22:09:00 +0100305 struct i2c_driver *driver;
306
Jean Delvare51298d12009-09-18 22:45:45 +0200307 if (!client || !dev->driver)
David Brownellf37dd802007-02-13 22:09:00 +0100308 return 0;
309 driver = to_i2c_driver(dev->driver);
310 if (!driver->suspend)
311 return 0;
Jean Delvare51298d12009-09-18 22:45:45 +0200312 return driver->suspend(client, mesg);
David Brownellf37dd802007-02-13 22:09:00 +0100313}
314
Rafael J. Wysocki2f60ba72010-05-10 23:09:30 +0200315static int i2c_legacy_resume(struct device *dev)
David Brownellf37dd802007-02-13 22:09:00 +0100316{
Jean Delvare51298d12009-09-18 22:45:45 +0200317 struct i2c_client *client = i2c_verify_client(dev);
David Brownellf37dd802007-02-13 22:09:00 +0100318 struct i2c_driver *driver;
319
Jean Delvare51298d12009-09-18 22:45:45 +0200320 if (!client || !dev->driver)
David Brownellf37dd802007-02-13 22:09:00 +0100321 return 0;
322 driver = to_i2c_driver(dev->driver);
323 if (!driver->resume)
324 return 0;
Jean Delvare51298d12009-09-18 22:45:45 +0200325 return driver->resume(client);
David Brownellf37dd802007-02-13 22:09:00 +0100326}
327
Rafael J. Wysocki2f60ba72010-05-10 23:09:30 +0200328static int i2c_device_pm_suspend(struct device *dev)
329{
330 const struct dev_pm_ops *pm = dev->driver ? dev->driver->pm : NULL;
331
Mark Brownd529de22011-01-14 22:03:49 +0100332 if (pm)
333 return pm_generic_suspend(dev);
334 else
335 return i2c_legacy_suspend(dev, PMSG_SUSPEND);
Rafael J. Wysocki2f60ba72010-05-10 23:09:30 +0200336}
337
338static int i2c_device_pm_resume(struct device *dev)
339{
340 const struct dev_pm_ops *pm = dev->driver ? dev->driver->pm : NULL;
Rafael J. Wysocki2f60ba72010-05-10 23:09:30 +0200341
342 if (pm)
Mark Brownd529de22011-01-14 22:03:49 +0100343 return pm_generic_resume(dev);
Rafael J. Wysocki2f60ba72010-05-10 23:09:30 +0200344 else
Mark Brownd529de22011-01-14 22:03:49 +0100345 return i2c_legacy_resume(dev);
Rafael J. Wysocki2f60ba72010-05-10 23:09:30 +0200346}
347
348static int i2c_device_pm_freeze(struct device *dev)
349{
350 const struct dev_pm_ops *pm = dev->driver ? dev->driver->pm : NULL;
351
Mark Brownd529de22011-01-14 22:03:49 +0100352 if (pm)
353 return pm_generic_freeze(dev);
354 else
355 return i2c_legacy_suspend(dev, PMSG_FREEZE);
Rafael J. Wysocki2f60ba72010-05-10 23:09:30 +0200356}
357
358static int i2c_device_pm_thaw(struct device *dev)
359{
360 const struct dev_pm_ops *pm = dev->driver ? dev->driver->pm : NULL;
361
Mark Brownd529de22011-01-14 22:03:49 +0100362 if (pm)
363 return pm_generic_thaw(dev);
364 else
365 return i2c_legacy_resume(dev);
Rafael J. Wysocki2f60ba72010-05-10 23:09:30 +0200366}
367
368static int i2c_device_pm_poweroff(struct device *dev)
369{
370 const struct dev_pm_ops *pm = dev->driver ? dev->driver->pm : NULL;
371
Mark Brownd529de22011-01-14 22:03:49 +0100372 if (pm)
373 return pm_generic_poweroff(dev);
374 else
375 return i2c_legacy_suspend(dev, PMSG_HIBERNATE);
Rafael J. Wysocki2f60ba72010-05-10 23:09:30 +0200376}
377
378static int i2c_device_pm_restore(struct device *dev)
379{
380 const struct dev_pm_ops *pm = dev->driver ? dev->driver->pm : NULL;
Rafael J. Wysocki2f60ba72010-05-10 23:09:30 +0200381
382 if (pm)
Mark Brownd529de22011-01-14 22:03:49 +0100383 return pm_generic_restore(dev);
Rafael J. Wysocki2f60ba72010-05-10 23:09:30 +0200384 else
Mark Brownd529de22011-01-14 22:03:49 +0100385 return i2c_legacy_resume(dev);
Rafael J. Wysocki2f60ba72010-05-10 23:09:30 +0200386}
387#else /* !CONFIG_PM_SLEEP */
388#define i2c_device_pm_suspend NULL
389#define i2c_device_pm_resume NULL
390#define i2c_device_pm_freeze NULL
391#define i2c_device_pm_thaw NULL
392#define i2c_device_pm_poweroff NULL
393#define i2c_device_pm_restore NULL
394#endif /* !CONFIG_PM_SLEEP */
395
David Brownell9c1600e2007-05-01 23:26:31 +0200396static void i2c_client_dev_release(struct device *dev)
397{
398 kfree(to_i2c_client(dev));
399}
400
Zhenwen Xu09b8ce02009-03-28 21:34:46 +0100401static ssize_t
Jean Delvare4f8cf822009-09-18 22:45:46 +0200402show_name(struct device *dev, struct device_attribute *attr, char *buf)
David Brownell7b4fbc52007-05-01 23:26:30 +0200403{
Jean Delvare4f8cf822009-09-18 22:45:46 +0200404 return sprintf(buf, "%s\n", dev->type == &i2c_client_type ?
405 to_i2c_client(dev)->name : to_i2c_adapter(dev)->name);
David Brownell7b4fbc52007-05-01 23:26:30 +0200406}
407
Zhenwen Xu09b8ce02009-03-28 21:34:46 +0100408static ssize_t
409show_modalias(struct device *dev, struct device_attribute *attr, char *buf)
David Brownell7b4fbc52007-05-01 23:26:30 +0200410{
411 struct i2c_client *client = to_i2c_client(dev);
Jean Delvareeb8a7902008-05-18 20:49:41 +0200412 return sprintf(buf, "%s%s\n", I2C_MODULE_PREFIX, client->name);
David Brownell7b4fbc52007-05-01 23:26:30 +0200413}
414
Jean Delvare4f8cf822009-09-18 22:45:46 +0200415static DEVICE_ATTR(name, S_IRUGO, show_name, NULL);
Jean Delvare51298d12009-09-18 22:45:45 +0200416static DEVICE_ATTR(modalias, S_IRUGO, show_modalias, NULL);
417
418static struct attribute *i2c_dev_attrs[] = {
419 &dev_attr_name.attr,
David Brownell7b4fbc52007-05-01 23:26:30 +0200420 /* modalias helps coldplug: modprobe $(cat .../modalias) */
Jean Delvare51298d12009-09-18 22:45:45 +0200421 &dev_attr_modalias.attr,
422 NULL
423};
424
425static struct attribute_group i2c_dev_attr_group = {
426 .attrs = i2c_dev_attrs,
427};
428
429static const struct attribute_group *i2c_dev_attr_groups[] = {
430 &i2c_dev_attr_group,
431 NULL
David Brownell7b4fbc52007-05-01 23:26:30 +0200432};
433
Tobias Klauser0b2c3682010-01-16 20:43:12 +0100434static const struct dev_pm_ops i2c_device_pm_ops = {
sonic zhang54067ee2009-12-14 21:17:30 +0100435 .suspend = i2c_device_pm_suspend,
436 .resume = i2c_device_pm_resume,
Rafael J. Wysocki2f60ba72010-05-10 23:09:30 +0200437 .freeze = i2c_device_pm_freeze,
438 .thaw = i2c_device_pm_thaw,
439 .poweroff = i2c_device_pm_poweroff,
440 .restore = i2c_device_pm_restore,
441 SET_RUNTIME_PM_OPS(
442 pm_generic_runtime_suspend,
443 pm_generic_runtime_resume,
Rafael J. Wysocki45f0a852013-06-03 21:49:52 +0200444 NULL
Rafael J. Wysocki2f60ba72010-05-10 23:09:30 +0200445 )
sonic zhang54067ee2009-12-14 21:17:30 +0100446};
447
Jon Smirle9ca9eb2008-07-14 22:38:35 +0200448struct bus_type i2c_bus_type = {
David Brownellf37dd802007-02-13 22:09:00 +0100449 .name = "i2c",
450 .match = i2c_device_match,
451 .probe = i2c_device_probe,
452 .remove = i2c_device_remove,
453 .shutdown = i2c_device_shutdown,
sonic zhang54067ee2009-12-14 21:17:30 +0100454 .pm = &i2c_device_pm_ops,
Russell Kingb864c7d2006-01-05 14:37:50 +0000455};
Jon Smirle9ca9eb2008-07-14 22:38:35 +0200456EXPORT_SYMBOL_GPL(i2c_bus_type);
Russell Kingb864c7d2006-01-05 14:37:50 +0000457
Jean Delvare51298d12009-09-18 22:45:45 +0200458static struct device_type i2c_client_type = {
459 .groups = i2c_dev_attr_groups,
460 .uevent = i2c_device_uevent,
461 .release = i2c_client_dev_release,
462};
463
David Brownell9b766b82008-01-27 18:14:51 +0100464
465/**
466 * i2c_verify_client - return parameter as i2c_client, or NULL
467 * @dev: device, probably from some driver model iterator
468 *
469 * When traversing the driver model tree, perhaps using driver model
470 * iterators like @device_for_each_child(), you can't assume very much
471 * about the nodes you find. Use this function to avoid oopses caused
472 * by wrongly treating some non-I2C device as an i2c_client.
473 */
474struct i2c_client *i2c_verify_client(struct device *dev)
475{
Jean Delvare51298d12009-09-18 22:45:45 +0200476 return (dev->type == &i2c_client_type)
David Brownell9b766b82008-01-27 18:14:51 +0100477 ? to_i2c_client(dev)
478 : NULL;
479}
480EXPORT_SYMBOL(i2c_verify_client);
481
482
Jean Delvare3a89db52010-06-03 11:33:52 +0200483/* This is a permissive address validity check, I2C address map constraints
Lucas De Marchi25985ed2011-03-30 22:57:33 -0300484 * are purposely not enforced, except for the general call address. */
Jean Delvare3a89db52010-06-03 11:33:52 +0200485static int i2c_check_client_addr_validity(const struct i2c_client *client)
486{
487 if (client->flags & I2C_CLIENT_TEN) {
488 /* 10-bit address, all values are valid */
489 if (client->addr > 0x3ff)
490 return -EINVAL;
491 } else {
492 /* 7-bit address, reject the general call address */
493 if (client->addr == 0x00 || client->addr > 0x7f)
494 return -EINVAL;
495 }
496 return 0;
497}
498
Jean Delvare656b8762010-06-03 11:33:53 +0200499/* And this is a strict address validity check, used when probing. If a
500 * device uses a reserved address, then it shouldn't be probed. 7-bit
501 * addressing is assumed, 10-bit address devices are rare and should be
502 * explicitly enumerated. */
503static int i2c_check_addr_validity(unsigned short addr)
504{
505 /*
506 * Reserved addresses per I2C specification:
507 * 0x00 General call address / START byte
508 * 0x01 CBUS address
509 * 0x02 Reserved for different bus format
510 * 0x03 Reserved for future purposes
511 * 0x04-0x07 Hs-mode master code
512 * 0x78-0x7b 10-bit slave addressing
513 * 0x7c-0x7f Reserved for future purposes
514 */
515 if (addr < 0x08 || addr > 0x77)
516 return -EINVAL;
517 return 0;
518}
519
Jean Delvare3b5f7942010-06-03 11:33:55 +0200520static int __i2c_check_addr_busy(struct device *dev, void *addrp)
521{
522 struct i2c_client *client = i2c_verify_client(dev);
523 int addr = *(int *)addrp;
524
525 if (client && client->addr == addr)
526 return -EBUSY;
527 return 0;
528}
529
Michael Lawnick08263742010-08-11 18:21:02 +0200530/* walk up mux tree */
531static int i2c_check_mux_parents(struct i2c_adapter *adapter, int addr)
532{
Jean Delvare97cc4d42010-10-24 18:16:57 +0200533 struct i2c_adapter *parent = i2c_parent_is_i2c_adapter(adapter);
Michael Lawnick08263742010-08-11 18:21:02 +0200534 int result;
535
536 result = device_for_each_child(&adapter->dev, &addr,
537 __i2c_check_addr_busy);
538
Jean Delvare97cc4d42010-10-24 18:16:57 +0200539 if (!result && parent)
540 result = i2c_check_mux_parents(parent, addr);
Michael Lawnick08263742010-08-11 18:21:02 +0200541
542 return result;
543}
544
545/* recurse down mux tree */
546static int i2c_check_mux_children(struct device *dev, void *addrp)
547{
548 int result;
549
550 if (dev->type == &i2c_adapter_type)
551 result = device_for_each_child(dev, addrp,
552 i2c_check_mux_children);
553 else
554 result = __i2c_check_addr_busy(dev, addrp);
555
556 return result;
557}
558
Jean Delvare3b5f7942010-06-03 11:33:55 +0200559static int i2c_check_addr_busy(struct i2c_adapter *adapter, int addr)
560{
Jean Delvare97cc4d42010-10-24 18:16:57 +0200561 struct i2c_adapter *parent = i2c_parent_is_i2c_adapter(adapter);
Michael Lawnick08263742010-08-11 18:21:02 +0200562 int result = 0;
563
Jean Delvare97cc4d42010-10-24 18:16:57 +0200564 if (parent)
565 result = i2c_check_mux_parents(parent, addr);
Michael Lawnick08263742010-08-11 18:21:02 +0200566
567 if (!result)
568 result = device_for_each_child(&adapter->dev, &addr,
569 i2c_check_mux_children);
570
571 return result;
Jean Delvare3b5f7942010-06-03 11:33:55 +0200572}
573
David Brownell9c1600e2007-05-01 23:26:31 +0200574/**
Jean Delvarefe61e072010-08-11 18:20:58 +0200575 * i2c_lock_adapter - Get exclusive access to an I2C bus segment
576 * @adapter: Target I2C bus segment
577 */
578void i2c_lock_adapter(struct i2c_adapter *adapter)
579{
Jean Delvare97cc4d42010-10-24 18:16:57 +0200580 struct i2c_adapter *parent = i2c_parent_is_i2c_adapter(adapter);
581
582 if (parent)
583 i2c_lock_adapter(parent);
Michael Lawnick08263742010-08-11 18:21:02 +0200584 else
585 rt_mutex_lock(&adapter->bus_lock);
Jean Delvarefe61e072010-08-11 18:20:58 +0200586}
587EXPORT_SYMBOL_GPL(i2c_lock_adapter);
588
589/**
590 * i2c_trylock_adapter - Try to get exclusive access to an I2C bus segment
591 * @adapter: Target I2C bus segment
592 */
593static int i2c_trylock_adapter(struct i2c_adapter *adapter)
594{
Jean Delvare97cc4d42010-10-24 18:16:57 +0200595 struct i2c_adapter *parent = i2c_parent_is_i2c_adapter(adapter);
596
597 if (parent)
598 return i2c_trylock_adapter(parent);
Michael Lawnick08263742010-08-11 18:21:02 +0200599 else
600 return rt_mutex_trylock(&adapter->bus_lock);
Jean Delvarefe61e072010-08-11 18:20:58 +0200601}
602
603/**
604 * i2c_unlock_adapter - Release exclusive access to an I2C bus segment
605 * @adapter: Target I2C bus segment
606 */
607void i2c_unlock_adapter(struct i2c_adapter *adapter)
608{
Jean Delvare97cc4d42010-10-24 18:16:57 +0200609 struct i2c_adapter *parent = i2c_parent_is_i2c_adapter(adapter);
610
611 if (parent)
612 i2c_unlock_adapter(parent);
Michael Lawnick08263742010-08-11 18:21:02 +0200613 else
614 rt_mutex_unlock(&adapter->bus_lock);
Jean Delvarefe61e072010-08-11 18:20:58 +0200615}
616EXPORT_SYMBOL_GPL(i2c_unlock_adapter);
617
Jarkko Nikula70762ab2013-11-14 14:03:52 +0200618static void i2c_dev_set_name(struct i2c_adapter *adap,
619 struct i2c_client *client)
620{
621 struct acpi_device *adev = ACPI_COMPANION(&client->dev);
622
623 if (adev) {
624 dev_set_name(&client->dev, "i2c-%s", acpi_dev_name(adev));
625 return;
626 }
627
628 /* For 10-bit clients, add an arbitrary offset to avoid collisions */
629 dev_set_name(&client->dev, "%d-%04x", i2c_adapter_id(adap),
630 client->addr | ((client->flags & I2C_CLIENT_TEN)
631 ? 0xa000 : 0));
632}
633
Jean Delvarefe61e072010-08-11 18:20:58 +0200634/**
Jean Delvaref8a227e2009-06-19 16:58:18 +0200635 * i2c_new_device - instantiate an i2c device
David Brownell9c1600e2007-05-01 23:26:31 +0200636 * @adap: the adapter managing the device
637 * @info: describes one I2C device; bus_num is ignored
David Brownelld64f73b2007-07-12 14:12:28 +0200638 * Context: can sleep
David Brownell9c1600e2007-05-01 23:26:31 +0200639 *
Jean Delvaref8a227e2009-06-19 16:58:18 +0200640 * Create an i2c device. Binding is handled through driver model
641 * probe()/remove() methods. A driver may be bound to this device when we
642 * return from this function, or any later moment (e.g. maybe hotplugging will
643 * load the driver module). This call is not appropriate for use by mainboard
644 * initialization logic, which usually runs during an arch_initcall() long
645 * before any i2c_adapter could exist.
David Brownell9c1600e2007-05-01 23:26:31 +0200646 *
647 * This returns the new i2c client, which may be saved for later use with
648 * i2c_unregister_device(); or NULL to indicate an error.
649 */
650struct i2c_client *
651i2c_new_device(struct i2c_adapter *adap, struct i2c_board_info const *info)
652{
653 struct i2c_client *client;
654 int status;
655
656 client = kzalloc(sizeof *client, GFP_KERNEL);
657 if (!client)
658 return NULL;
659
660 client->adapter = adap;
661
662 client->dev.platform_data = info->platform_data;
David Brownell3bbb8352007-10-13 23:56:29 +0200663
Anton Vorontsov11f1f2a2008-10-22 20:21:33 +0200664 if (info->archdata)
665 client->dev.archdata = *info->archdata;
666
Marc Pignatee354252008-08-28 08:33:22 +0200667 client->flags = info->flags;
David Brownell9c1600e2007-05-01 23:26:31 +0200668 client->addr = info->addr;
669 client->irq = info->irq;
670
David Brownell9c1600e2007-05-01 23:26:31 +0200671 strlcpy(client->name, info->type, sizeof(client->name));
672
Jean Delvare3a89db52010-06-03 11:33:52 +0200673 /* Check for address validity */
674 status = i2c_check_client_addr_validity(client);
675 if (status) {
676 dev_err(&adap->dev, "Invalid %d-bit I2C address 0x%02hx\n",
677 client->flags & I2C_CLIENT_TEN ? 10 : 7, client->addr);
678 goto out_err_silent;
679 }
680
Jean Delvaref8a227e2009-06-19 16:58:18 +0200681 /* Check for address business */
Jean Delvare3b5f7942010-06-03 11:33:55 +0200682 status = i2c_check_addr_busy(adap, client->addr);
Jean Delvaref8a227e2009-06-19 16:58:18 +0200683 if (status)
684 goto out_err;
685
686 client->dev.parent = &client->adapter->dev;
687 client->dev.bus = &i2c_bus_type;
Jean Delvare51298d12009-09-18 22:45:45 +0200688 client->dev.type = &i2c_client_type;
Grant Likelyd12d42f2010-04-13 16:12:28 -0700689 client->dev.of_node = info->of_node;
Rafael J. Wysocki7b199812013-11-11 22:41:56 +0100690 ACPI_COMPANION_SET(&client->dev, info->acpi_node.companion);
Jean Delvaref8a227e2009-06-19 16:58:18 +0200691
Jarkko Nikula70762ab2013-11-14 14:03:52 +0200692 i2c_dev_set_name(adap, client);
Jean Delvaref8a227e2009-06-19 16:58:18 +0200693 status = device_register(&client->dev);
694 if (status)
695 goto out_err;
696
Jean Delvaref8a227e2009-06-19 16:58:18 +0200697 dev_dbg(&adap->dev, "client [%s] registered with bus id %s\n",
698 client->name, dev_name(&client->dev));
699
David Brownell9c1600e2007-05-01 23:26:31 +0200700 return client;
Jean Delvaref8a227e2009-06-19 16:58:18 +0200701
702out_err:
703 dev_err(&adap->dev, "Failed to register i2c client %s at 0x%02x "
704 "(%d)\n", client->name, client->addr, status);
Jean Delvare3a89db52010-06-03 11:33:52 +0200705out_err_silent:
Jean Delvaref8a227e2009-06-19 16:58:18 +0200706 kfree(client);
707 return NULL;
David Brownell9c1600e2007-05-01 23:26:31 +0200708}
709EXPORT_SYMBOL_GPL(i2c_new_device);
710
711
712/**
713 * i2c_unregister_device - reverse effect of i2c_new_device()
714 * @client: value returned from i2c_new_device()
David Brownelld64f73b2007-07-12 14:12:28 +0200715 * Context: can sleep
David Brownell9c1600e2007-05-01 23:26:31 +0200716 */
717void i2c_unregister_device(struct i2c_client *client)
David Brownella1d9e6e2007-05-01 23:26:30 +0200718{
David Brownella1d9e6e2007-05-01 23:26:30 +0200719 device_unregister(&client->dev);
720}
David Brownell9c1600e2007-05-01 23:26:31 +0200721EXPORT_SYMBOL_GPL(i2c_unregister_device);
David Brownella1d9e6e2007-05-01 23:26:30 +0200722
723
Jean Delvare60b129d2008-05-11 20:37:06 +0200724static const struct i2c_device_id dummy_id[] = {
725 { "dummy", 0 },
726 { },
727};
728
Jean Delvared2653e92008-04-29 23:11:39 +0200729static int dummy_probe(struct i2c_client *client,
730 const struct i2c_device_id *id)
731{
732 return 0;
733}
734
735static int dummy_remove(struct i2c_client *client)
David Brownelle9f13732008-01-27 18:14:52 +0100736{
737 return 0;
738}
739
740static struct i2c_driver dummy_driver = {
741 .driver.name = "dummy",
Jean Delvared2653e92008-04-29 23:11:39 +0200742 .probe = dummy_probe,
743 .remove = dummy_remove,
Jean Delvare60b129d2008-05-11 20:37:06 +0200744 .id_table = dummy_id,
David Brownelle9f13732008-01-27 18:14:52 +0100745};
746
747/**
748 * i2c_new_dummy - return a new i2c device bound to a dummy driver
749 * @adapter: the adapter managing the device
750 * @address: seven bit address to be used
David Brownelle9f13732008-01-27 18:14:52 +0100751 * Context: can sleep
752 *
753 * This returns an I2C client bound to the "dummy" driver, intended for use
754 * with devices that consume multiple addresses. Examples of such chips
755 * include various EEPROMS (like 24c04 and 24c08 models).
756 *
757 * These dummy devices have two main uses. First, most I2C and SMBus calls
758 * except i2c_transfer() need a client handle; the dummy will be that handle.
759 * And second, this prevents the specified address from being bound to a
760 * different driver.
761 *
762 * This returns the new i2c client, which should be saved for later use with
763 * i2c_unregister_device(); or NULL to indicate an error.
764 */
Zhenwen Xu09b8ce02009-03-28 21:34:46 +0100765struct i2c_client *i2c_new_dummy(struct i2c_adapter *adapter, u16 address)
David Brownelle9f13732008-01-27 18:14:52 +0100766{
767 struct i2c_board_info info = {
Jean Delvare60b129d2008-05-11 20:37:06 +0200768 I2C_BOARD_INFO("dummy", address),
David Brownelle9f13732008-01-27 18:14:52 +0100769 };
770
David Brownelle9f13732008-01-27 18:14:52 +0100771 return i2c_new_device(adapter, &info);
772}
773EXPORT_SYMBOL_GPL(i2c_new_dummy);
774
David Brownellf37dd802007-02-13 22:09:00 +0100775/* ------------------------------------------------------------------------- */
776
David Brownell16ffadf2007-05-01 23:26:28 +0200777/* I2C bus adapters -- one roots each I2C or SMBUS segment */
778
Adrian Bunk83eaaed2007-10-13 23:56:30 +0200779static void i2c_adapter_dev_release(struct device *dev)
Linus Torvalds1da177e2005-04-16 15:20:36 -0700780{
David Brownellef2c83212007-05-01 23:26:28 +0200781 struct i2c_adapter *adap = to_i2c_adapter(dev);
Linus Torvalds1da177e2005-04-16 15:20:36 -0700782 complete(&adap->dev_released);
783}
784
Jean Delvare99cd8e22009-06-19 16:58:20 +0200785/*
Jean Delvare390946b2012-09-10 10:14:02 +0200786 * This function is only needed for mutex_lock_nested, so it is never
787 * called unless locking correctness checking is enabled. Thus we
788 * make it inline to avoid a compiler warning. That's what gcc ends up
789 * doing anyway.
790 */
791static inline unsigned int i2c_adapter_depth(struct i2c_adapter *adapter)
792{
793 unsigned int depth = 0;
794
795 while ((adapter = i2c_parent_is_i2c_adapter(adapter)))
796 depth++;
797
798 return depth;
799}
800
801/*
Jean Delvare99cd8e22009-06-19 16:58:20 +0200802 * Let users instantiate I2C devices through sysfs. This can be used when
803 * platform initialization code doesn't contain the proper data for
804 * whatever reason. Also useful for drivers that do device detection and
805 * detection fails, either because the device uses an unexpected address,
806 * or this is a compatible device with different ID register values.
807 *
808 * Parameter checking may look overzealous, but we really don't want
809 * the user to provide incorrect parameters.
810 */
811static ssize_t
812i2c_sysfs_new_device(struct device *dev, struct device_attribute *attr,
813 const char *buf, size_t count)
814{
815 struct i2c_adapter *adap = to_i2c_adapter(dev);
816 struct i2c_board_info info;
817 struct i2c_client *client;
818 char *blank, end;
819 int res;
820
Jean Delvare99cd8e22009-06-19 16:58:20 +0200821 memset(&info, 0, sizeof(struct i2c_board_info));
822
823 blank = strchr(buf, ' ');
824 if (!blank) {
825 dev_err(dev, "%s: Missing parameters\n", "new_device");
826 return -EINVAL;
827 }
828 if (blank - buf > I2C_NAME_SIZE - 1) {
829 dev_err(dev, "%s: Invalid device name\n", "new_device");
830 return -EINVAL;
831 }
832 memcpy(info.type, buf, blank - buf);
833
834 /* Parse remaining parameters, reject extra parameters */
835 res = sscanf(++blank, "%hi%c", &info.addr, &end);
836 if (res < 1) {
837 dev_err(dev, "%s: Can't parse I2C address\n", "new_device");
838 return -EINVAL;
839 }
840 if (res > 1 && end != '\n') {
841 dev_err(dev, "%s: Extra parameters\n", "new_device");
842 return -EINVAL;
843 }
844
Jean Delvare99cd8e22009-06-19 16:58:20 +0200845 client = i2c_new_device(adap, &info);
846 if (!client)
Jean Delvare3a89db52010-06-03 11:33:52 +0200847 return -EINVAL;
Jean Delvare99cd8e22009-06-19 16:58:20 +0200848
849 /* Keep track of the added device */
Jean Delvaredafc50d2010-08-11 18:21:01 +0200850 mutex_lock(&adap->userspace_clients_lock);
Jean Delvare6629dcf2010-05-04 11:09:28 +0200851 list_add_tail(&client->detected, &adap->userspace_clients);
Jean Delvaredafc50d2010-08-11 18:21:01 +0200852 mutex_unlock(&adap->userspace_clients_lock);
Jean Delvare99cd8e22009-06-19 16:58:20 +0200853 dev_info(dev, "%s: Instantiated device %s at 0x%02hx\n", "new_device",
854 info.type, info.addr);
855
856 return count;
857}
858
859/*
860 * And of course let the users delete the devices they instantiated, if
861 * they got it wrong. This interface can only be used to delete devices
862 * instantiated by i2c_sysfs_new_device above. This guarantees that we
863 * don't delete devices to which some kernel code still has references.
864 *
865 * Parameter checking may look overzealous, but we really don't want
866 * the user to delete the wrong device.
867 */
868static ssize_t
869i2c_sysfs_delete_device(struct device *dev, struct device_attribute *attr,
870 const char *buf, size_t count)
871{
872 struct i2c_adapter *adap = to_i2c_adapter(dev);
873 struct i2c_client *client, *next;
874 unsigned short addr;
875 char end;
876 int res;
877
878 /* Parse parameters, reject extra parameters */
879 res = sscanf(buf, "%hi%c", &addr, &end);
880 if (res < 1) {
881 dev_err(dev, "%s: Can't parse I2C address\n", "delete_device");
882 return -EINVAL;
883 }
884 if (res > 1 && end != '\n') {
885 dev_err(dev, "%s: Extra parameters\n", "delete_device");
886 return -EINVAL;
887 }
888
889 /* Make sure the device was added through sysfs */
890 res = -ENOENT;
Jean Delvare390946b2012-09-10 10:14:02 +0200891 mutex_lock_nested(&adap->userspace_clients_lock,
892 i2c_adapter_depth(adap));
Jean Delvare6629dcf2010-05-04 11:09:28 +0200893 list_for_each_entry_safe(client, next, &adap->userspace_clients,
894 detected) {
895 if (client->addr == addr) {
Jean Delvare99cd8e22009-06-19 16:58:20 +0200896 dev_info(dev, "%s: Deleting device %s at 0x%02hx\n",
897 "delete_device", client->name, client->addr);
898
899 list_del(&client->detected);
900 i2c_unregister_device(client);
901 res = count;
902 break;
903 }
904 }
Jean Delvaredafc50d2010-08-11 18:21:01 +0200905 mutex_unlock(&adap->userspace_clients_lock);
Jean Delvare99cd8e22009-06-19 16:58:20 +0200906
907 if (res < 0)
908 dev_err(dev, "%s: Can't find device in list\n",
909 "delete_device");
910 return res;
911}
912
Jean Delvare4f8cf822009-09-18 22:45:46 +0200913static DEVICE_ATTR(new_device, S_IWUSR, NULL, i2c_sysfs_new_device);
Alexander Sverdline9b526f2013-05-17 14:56:35 +0200914static DEVICE_ATTR_IGNORE_LOCKDEP(delete_device, S_IWUSR, NULL,
915 i2c_sysfs_delete_device);
Jean Delvare4f8cf822009-09-18 22:45:46 +0200916
917static struct attribute *i2c_adapter_attrs[] = {
918 &dev_attr_name.attr,
919 &dev_attr_new_device.attr,
920 &dev_attr_delete_device.attr,
921 NULL
David Brownell16ffadf2007-05-01 23:26:28 +0200922};
923
Jean Delvare4f8cf822009-09-18 22:45:46 +0200924static struct attribute_group i2c_adapter_attr_group = {
925 .attrs = i2c_adapter_attrs,
926};
927
928static const struct attribute_group *i2c_adapter_attr_groups[] = {
929 &i2c_adapter_attr_group,
930 NULL
931};
932
Michael Lawnick08263742010-08-11 18:21:02 +0200933struct device_type i2c_adapter_type = {
Jean Delvare4f8cf822009-09-18 22:45:46 +0200934 .groups = i2c_adapter_attr_groups,
935 .release = i2c_adapter_dev_release,
David Brownell16ffadf2007-05-01 23:26:28 +0200936};
Michael Lawnick08263742010-08-11 18:21:02 +0200937EXPORT_SYMBOL_GPL(i2c_adapter_type);
Linus Torvalds1da177e2005-04-16 15:20:36 -0700938
Stephen Warren643dd092012-04-17 12:43:33 -0600939/**
940 * i2c_verify_adapter - return parameter as i2c_adapter or NULL
941 * @dev: device, probably from some driver model iterator
942 *
943 * When traversing the driver model tree, perhaps using driver model
944 * iterators like @device_for_each_child(), you can't assume very much
945 * about the nodes you find. Use this function to avoid oopses caused
946 * by wrongly treating some non-I2C device as an i2c_adapter.
947 */
948struct i2c_adapter *i2c_verify_adapter(struct device *dev)
949{
950 return (dev->type == &i2c_adapter_type)
951 ? to_i2c_adapter(dev)
952 : NULL;
953}
954EXPORT_SYMBOL(i2c_verify_adapter);
955
Jean Delvare2bb50952009-09-18 22:45:46 +0200956#ifdef CONFIG_I2C_COMPAT
957static struct class_compat *i2c_adapter_compat_class;
958#endif
959
David Brownell9c1600e2007-05-01 23:26:31 +0200960static void i2c_scan_static_board_info(struct i2c_adapter *adapter)
961{
962 struct i2c_devinfo *devinfo;
963
Rodolfo Giomettif18c41d2009-06-19 16:58:20 +0200964 down_read(&__i2c_board_lock);
David Brownell9c1600e2007-05-01 23:26:31 +0200965 list_for_each_entry(devinfo, &__i2c_board_list, list) {
966 if (devinfo->busnum == adapter->nr
967 && !i2c_new_device(adapter,
968 &devinfo->board_info))
Zhenwen Xu09b8ce02009-03-28 21:34:46 +0100969 dev_err(&adapter->dev,
970 "Can't create device at 0x%02x\n",
David Brownell9c1600e2007-05-01 23:26:31 +0200971 devinfo->board_info.addr);
972 }
Rodolfo Giomettif18c41d2009-06-19 16:58:20 +0200973 up_read(&__i2c_board_lock);
David Brownell9c1600e2007-05-01 23:26:31 +0200974}
975
Wolfram Sang687b81d2013-07-11 12:56:15 +0100976/* OF support code */
977
978#if IS_ENABLED(CONFIG_OF)
979static void of_i2c_register_devices(struct i2c_adapter *adap)
980{
981 void *result;
982 struct device_node *node;
983
984 /* Only register child devices if the adapter has a node pointer set */
985 if (!adap->dev.of_node)
986 return;
987
988 dev_dbg(&adap->dev, "of_i2c: walking child nodes\n");
989
990 for_each_available_child_of_node(adap->dev.of_node, node) {
991 struct i2c_board_info info = {};
992 struct dev_archdata dev_ad = {};
993 const __be32 *addr;
994 int len;
995
996 dev_dbg(&adap->dev, "of_i2c: register %s\n", node->full_name);
997
998 if (of_modalias_node(node, info.type, sizeof(info.type)) < 0) {
999 dev_err(&adap->dev, "of_i2c: modalias failure on %s\n",
1000 node->full_name);
1001 continue;
1002 }
1003
1004 addr = of_get_property(node, "reg", &len);
1005 if (!addr || (len < sizeof(int))) {
1006 dev_err(&adap->dev, "of_i2c: invalid reg on %s\n",
1007 node->full_name);
1008 continue;
1009 }
1010
1011 info.addr = be32_to_cpup(addr);
1012 if (info.addr > (1 << 10) - 1) {
1013 dev_err(&adap->dev, "of_i2c: invalid addr=%x on %s\n",
1014 info.addr, node->full_name);
1015 continue;
1016 }
1017
1018 info.irq = irq_of_parse_and_map(node, 0);
1019 info.of_node = of_node_get(node);
1020 info.archdata = &dev_ad;
1021
1022 if (of_get_property(node, "wakeup-source", NULL))
1023 info.flags |= I2C_CLIENT_WAKE;
1024
1025 request_module("%s%s", I2C_MODULE_PREFIX, info.type);
1026
1027 result = i2c_new_device(adap, &info);
1028 if (result == NULL) {
1029 dev_err(&adap->dev, "of_i2c: Failure registering %s\n",
1030 node->full_name);
1031 of_node_put(node);
1032 irq_dispose_mapping(info.irq);
1033 continue;
1034 }
1035 }
1036}
1037
1038static int of_dev_node_match(struct device *dev, void *data)
1039{
1040 return dev->of_node == data;
1041}
1042
1043/* must call put_device() when done with returned i2c_client device */
1044struct i2c_client *of_find_i2c_device_by_node(struct device_node *node)
1045{
1046 struct device *dev;
1047
1048 dev = bus_find_device(&i2c_bus_type, NULL, node,
1049 of_dev_node_match);
1050 if (!dev)
1051 return NULL;
1052
1053 return i2c_verify_client(dev);
1054}
1055EXPORT_SYMBOL(of_find_i2c_device_by_node);
1056
1057/* must call put_device() when done with returned i2c_adapter device */
1058struct i2c_adapter *of_find_i2c_adapter_by_node(struct device_node *node)
1059{
1060 struct device *dev;
1061
1062 dev = bus_find_device(&i2c_bus_type, NULL, node,
1063 of_dev_node_match);
1064 if (!dev)
1065 return NULL;
1066
1067 return i2c_verify_adapter(dev);
1068}
1069EXPORT_SYMBOL(of_find_i2c_adapter_by_node);
1070#else
1071static void of_i2c_register_devices(struct i2c_adapter *adap) { }
1072#endif /* CONFIG_OF */
1073
Mika Westerberg55e71ed2013-08-21 17:28:23 +03001074/* ACPI support code */
1075
1076#if IS_ENABLED(CONFIG_ACPI)
1077static int acpi_i2c_add_resource(struct acpi_resource *ares, void *data)
1078{
1079 struct i2c_board_info *info = data;
1080
1081 if (ares->type == ACPI_RESOURCE_TYPE_SERIAL_BUS) {
1082 struct acpi_resource_i2c_serialbus *sb;
1083
1084 sb = &ares->data.i2c_serial_bus;
1085 if (sb->type == ACPI_RESOURCE_SERIAL_TYPE_I2C) {
1086 info->addr = sb->slave_address;
1087 if (sb->access_mode == ACPI_I2C_10BIT_MODE)
1088 info->flags |= I2C_CLIENT_TEN;
1089 }
1090 } else if (info->irq < 0) {
1091 struct resource r;
1092
1093 if (acpi_dev_resource_interrupt(ares, 0, &r))
1094 info->irq = r.start;
1095 }
1096
1097 /* Tell the ACPI core to skip this resource */
1098 return 1;
1099}
1100
1101static acpi_status acpi_i2c_add_device(acpi_handle handle, u32 level,
1102 void *data, void **return_value)
1103{
1104 struct i2c_adapter *adapter = data;
1105 struct list_head resource_list;
1106 struct i2c_board_info info;
1107 struct acpi_device *adev;
1108 int ret;
1109
1110 if (acpi_bus_get_device(handle, &adev))
1111 return AE_OK;
1112 if (acpi_bus_get_status(adev) || !adev->status.present)
1113 return AE_OK;
1114
1115 memset(&info, 0, sizeof(info));
Rafael J. Wysocki7b199812013-11-11 22:41:56 +01001116 info.acpi_node.companion = adev;
Mika Westerberg55e71ed2013-08-21 17:28:23 +03001117 info.irq = -1;
1118
1119 INIT_LIST_HEAD(&resource_list);
1120 ret = acpi_dev_get_resources(adev, &resource_list,
1121 acpi_i2c_add_resource, &info);
1122 acpi_dev_free_resource_list(&resource_list);
1123
1124 if (ret < 0 || !info.addr)
1125 return AE_OK;
1126
Lv Zhenga76e9bd2013-10-10 13:28:47 +03001127 adev->power.flags.ignore_parent = true;
Mika Westerberg55e71ed2013-08-21 17:28:23 +03001128 strlcpy(info.type, dev_name(&adev->dev), sizeof(info.type));
1129 if (!i2c_new_device(adapter, &info)) {
Lv Zhenga76e9bd2013-10-10 13:28:47 +03001130 adev->power.flags.ignore_parent = false;
Mika Westerberg55e71ed2013-08-21 17:28:23 +03001131 dev_err(&adapter->dev,
1132 "failed to add I2C device %s from ACPI\n",
1133 dev_name(&adev->dev));
1134 }
1135
1136 return AE_OK;
1137}
1138
1139/**
1140 * acpi_i2c_register_devices - enumerate I2C slave devices behind adapter
1141 * @adap: pointer to adapter
1142 *
1143 * Enumerate all I2C slave devices behind this adapter by walking the ACPI
1144 * namespace. When a device is found it will be added to the Linux device
1145 * model and bound to the corresponding ACPI handle.
1146 */
1147static void acpi_i2c_register_devices(struct i2c_adapter *adap)
1148{
1149 acpi_handle handle;
1150 acpi_status status;
1151
Jean Delvare47b6e4772013-10-10 08:04:06 +02001152 if (!adap->dev.parent)
1153 return;
1154
Mika Westerberg55e71ed2013-08-21 17:28:23 +03001155 handle = ACPI_HANDLE(adap->dev.parent);
1156 if (!handle)
1157 return;
1158
1159 status = acpi_walk_namespace(ACPI_TYPE_DEVICE, handle, 1,
1160 acpi_i2c_add_device, NULL,
1161 adap, NULL);
1162 if (ACPI_FAILURE(status))
1163 dev_warn(&adap->dev, "failed to enumerate I2C slaves\n");
1164}
1165#else
1166static inline void acpi_i2c_register_devices(struct i2c_adapter *adap) {}
1167#endif /* CONFIG_ACPI */
1168
Jean Delvare69b00892009-12-06 17:06:27 +01001169static int i2c_do_add_adapter(struct i2c_driver *driver,
1170 struct i2c_adapter *adap)
Jean Delvare026526f2008-01-27 18:14:49 +01001171{
Jean Delvare4735c982008-07-14 22:38:36 +02001172 /* Detect supported devices on that bus, and instantiate them */
1173 i2c_detect(adap, driver);
1174
1175 /* Let legacy drivers scan this bus for matching devices */
Jean Delvare026526f2008-01-27 18:14:49 +01001176 if (driver->attach_adapter) {
Jean Delvarea920ff42011-04-17 10:20:19 +02001177 dev_warn(&adap->dev, "%s: attach_adapter method is deprecated\n",
1178 driver->driver.name);
Jean Delvarefe6fc252011-03-20 14:50:53 +01001179 dev_warn(&adap->dev, "Please use another way to instantiate "
1180 "your i2c_client\n");
Jean Delvare026526f2008-01-27 18:14:49 +01001181 /* We ignore the return code; if it fails, too bad */
1182 driver->attach_adapter(adap);
1183 }
1184 return 0;
1185}
1186
Jean Delvare69b00892009-12-06 17:06:27 +01001187static int __process_new_adapter(struct device_driver *d, void *data)
1188{
1189 return i2c_do_add_adapter(to_i2c_driver(d), data);
1190}
1191
David Brownell6e13e642007-05-01 23:26:31 +02001192static int i2c_register_adapter(struct i2c_adapter *adap)
Linus Torvalds1da177e2005-04-16 15:20:36 -07001193{
Jean Delvared6703282010-08-11 18:20:59 +02001194 int res = 0;
Linus Torvalds1da177e2005-04-16 15:20:36 -07001195
David Brownell1d0b19c2008-10-14 17:30:05 +02001196 /* Can't register until after driver model init */
Jean Delvare35fc37f2009-06-19 16:58:19 +02001197 if (unlikely(WARN_ON(!i2c_bus_type.p))) {
1198 res = -EAGAIN;
1199 goto out_list;
1200 }
David Brownell1d0b19c2008-10-14 17:30:05 +02001201
Jean Delvare2236baa2010-11-15 22:40:38 +01001202 /* Sanity checks */
1203 if (unlikely(adap->name[0] == '\0')) {
1204 pr_err("i2c-core: Attempt to register an adapter with "
1205 "no name!\n");
1206 return -EINVAL;
1207 }
1208 if (unlikely(!adap->algo)) {
1209 pr_err("i2c-core: Attempt to register adapter '%s' with "
1210 "no algo!\n", adap->name);
1211 return -EINVAL;
1212 }
1213
Mika Kuoppala194684e2009-12-06 17:06:22 +01001214 rt_mutex_init(&adap->bus_lock);
Jean Delvaredafc50d2010-08-11 18:21:01 +02001215 mutex_init(&adap->userspace_clients_lock);
Jean Delvare6629dcf2010-05-04 11:09:28 +02001216 INIT_LIST_HEAD(&adap->userspace_clients);
Linus Torvalds1da177e2005-04-16 15:20:36 -07001217
Jean Delvare8fcfef62009-03-28 21:34:43 +01001218 /* Set default timeout to 1 second if not already set */
1219 if (adap->timeout == 0)
1220 adap->timeout = HZ;
1221
Kay Sievers27d9c182009-01-07 14:29:16 +01001222 dev_set_name(&adap->dev, "i2c-%d", adap->nr);
Jean Delvare4f8cf822009-09-18 22:45:46 +02001223 adap->dev.bus = &i2c_bus_type;
1224 adap->dev.type = &i2c_adapter_type;
Jean Delvareb119c6c2006-08-15 18:26:30 +02001225 res = device_register(&adap->dev);
1226 if (res)
1227 goto out_list;
Linus Torvalds1da177e2005-04-16 15:20:36 -07001228
Jean Delvareb6d7b3d2005-07-31 19:02:53 +02001229 dev_dbg(&adap->dev, "adapter [%s] registered\n", adap->name);
1230
Jean Delvare2bb50952009-09-18 22:45:46 +02001231#ifdef CONFIG_I2C_COMPAT
1232 res = class_compat_create_link(i2c_adapter_compat_class, &adap->dev,
1233 adap->dev.parent);
1234 if (res)
1235 dev_warn(&adap->dev,
1236 "Failed to create compatibility class link\n");
1237#endif
1238
Viresh Kumar5f9296b2012-02-28 18:26:31 +05301239 /* bus recovery specific initialization */
1240 if (adap->bus_recovery_info) {
1241 struct i2c_bus_recovery_info *bri = adap->bus_recovery_info;
1242
1243 if (!bri->recover_bus) {
1244 dev_err(&adap->dev, "No recover_bus() found, not using recovery\n");
1245 adap->bus_recovery_info = NULL;
1246 goto exit_recovery;
1247 }
1248
1249 /* Generic GPIO recovery */
1250 if (bri->recover_bus == i2c_generic_gpio_recovery) {
1251 if (!gpio_is_valid(bri->scl_gpio)) {
1252 dev_err(&adap->dev, "Invalid SCL gpio, not using recovery\n");
1253 adap->bus_recovery_info = NULL;
1254 goto exit_recovery;
1255 }
1256
1257 if (gpio_is_valid(bri->sda_gpio))
1258 bri->get_sda = get_sda_gpio_value;
1259 else
1260 bri->get_sda = NULL;
1261
1262 bri->get_scl = get_scl_gpio_value;
1263 bri->set_scl = set_scl_gpio_value;
1264 } else if (!bri->set_scl || !bri->get_scl) {
1265 /* Generic SCL recovery */
1266 dev_err(&adap->dev, "No {get|set}_gpio() found, not using recovery\n");
1267 adap->bus_recovery_info = NULL;
1268 }
1269 }
1270
1271exit_recovery:
Jean Delvare729d6dd2009-06-19 16:58:18 +02001272 /* create pre-declared device nodes */
Wolfram Sang687b81d2013-07-11 12:56:15 +01001273 of_i2c_register_devices(adap);
Mika Westerberg55e71ed2013-08-21 17:28:23 +03001274 acpi_i2c_register_devices(adap);
Wolfram Sang687b81d2013-07-11 12:56:15 +01001275
David Brownell6e13e642007-05-01 23:26:31 +02001276 if (adap->nr < __i2c_first_dynamic_bus_num)
1277 i2c_scan_static_board_info(adap);
1278
Jean Delvare4735c982008-07-14 22:38:36 +02001279 /* Notify drivers */
Jean Delvare35fc37f2009-06-19 16:58:19 +02001280 mutex_lock(&core_lock);
Jean Delvared6703282010-08-11 18:20:59 +02001281 bus_for_each_drv(&i2c_bus_type, NULL, adap, __process_new_adapter);
Jean Delvarecaada322008-01-27 18:14:49 +01001282 mutex_unlock(&core_lock);
Jean Delvare35fc37f2009-06-19 16:58:19 +02001283
1284 return 0;
Jean Delvareb119c6c2006-08-15 18:26:30 +02001285
Jean Delvareb119c6c2006-08-15 18:26:30 +02001286out_list:
Jean Delvare35fc37f2009-06-19 16:58:19 +02001287 mutex_lock(&core_lock);
Jean Delvareb119c6c2006-08-15 18:26:30 +02001288 idr_remove(&i2c_adapter_idr, adap->nr);
Jean Delvare35fc37f2009-06-19 16:58:19 +02001289 mutex_unlock(&core_lock);
1290 return res;
Linus Torvalds1da177e2005-04-16 15:20:36 -07001291}
1292
David Brownell6e13e642007-05-01 23:26:31 +02001293/**
Doug Andersonee5c2742013-03-01 08:57:31 -08001294 * __i2c_add_numbered_adapter - i2c_add_numbered_adapter where nr is never -1
1295 * @adap: the adapter to register (with adap->nr initialized)
1296 * Context: can sleep
1297 *
1298 * See i2c_add_numbered_adapter() for details.
1299 */
1300static int __i2c_add_numbered_adapter(struct i2c_adapter *adap)
1301{
1302 int id;
1303
1304 mutex_lock(&core_lock);
1305 id = idr_alloc(&i2c_adapter_idr, adap, adap->nr, adap->nr + 1,
1306 GFP_KERNEL);
1307 mutex_unlock(&core_lock);
1308 if (id < 0)
1309 return id == -ENOSPC ? -EBUSY : id;
1310
1311 return i2c_register_adapter(adap);
1312}
1313
1314/**
David Brownell6e13e642007-05-01 23:26:31 +02001315 * i2c_add_adapter - declare i2c adapter, use dynamic bus number
1316 * @adapter: the adapter to add
David Brownelld64f73b2007-07-12 14:12:28 +02001317 * Context: can sleep
David Brownell6e13e642007-05-01 23:26:31 +02001318 *
1319 * This routine is used to declare an I2C adapter when its bus number
Doug Andersonee5c2742013-03-01 08:57:31 -08001320 * doesn't matter or when its bus number is specified by an dt alias.
1321 * Examples of bases when the bus number doesn't matter: I2C adapters
1322 * dynamically added by USB links or PCI plugin cards.
David Brownell6e13e642007-05-01 23:26:31 +02001323 *
1324 * When this returns zero, a new bus number was allocated and stored
1325 * in adap->nr, and the specified adapter became available for clients.
1326 * Otherwise, a negative errno value is returned.
1327 */
1328int i2c_add_adapter(struct i2c_adapter *adapter)
1329{
Doug Andersonee5c2742013-03-01 08:57:31 -08001330 struct device *dev = &adapter->dev;
Tejun Heo4ae42b0f2013-02-27 17:04:15 -08001331 int id;
David Brownell6e13e642007-05-01 23:26:31 +02001332
Doug Andersonee5c2742013-03-01 08:57:31 -08001333 if (dev->of_node) {
1334 id = of_alias_get_id(dev->of_node, "i2c");
1335 if (id >= 0) {
1336 adapter->nr = id;
1337 return __i2c_add_numbered_adapter(adapter);
1338 }
1339 }
1340
Jean Delvarecaada322008-01-27 18:14:49 +01001341 mutex_lock(&core_lock);
Tejun Heo4ae42b0f2013-02-27 17:04:15 -08001342 id = idr_alloc(&i2c_adapter_idr, adapter,
1343 __i2c_first_dynamic_bus_num, 0, GFP_KERNEL);
Jean Delvarecaada322008-01-27 18:14:49 +01001344 mutex_unlock(&core_lock);
Tejun Heo4ae42b0f2013-02-27 17:04:15 -08001345 if (id < 0)
1346 return id;
David Brownell6e13e642007-05-01 23:26:31 +02001347
1348 adapter->nr = id;
Tejun Heo4ae42b0f2013-02-27 17:04:15 -08001349
David Brownell6e13e642007-05-01 23:26:31 +02001350 return i2c_register_adapter(adapter);
1351}
1352EXPORT_SYMBOL(i2c_add_adapter);
1353
1354/**
1355 * i2c_add_numbered_adapter - declare i2c adapter, use static bus number
1356 * @adap: the adapter to register (with adap->nr initialized)
David Brownelld64f73b2007-07-12 14:12:28 +02001357 * Context: can sleep
David Brownell6e13e642007-05-01 23:26:31 +02001358 *
1359 * This routine is used to declare an I2C adapter when its bus number
Randy Dunlap8c07e462008-03-23 20:28:20 +01001360 * matters. For example, use it for I2C adapters from system-on-chip CPUs,
1361 * or otherwise built in to the system's mainboard, and where i2c_board_info
David Brownell6e13e642007-05-01 23:26:31 +02001362 * is used to properly configure I2C devices.
1363 *
Grant Likely488bf312011-07-25 17:49:43 +02001364 * If the requested bus number is set to -1, then this function will behave
1365 * identically to i2c_add_adapter, and will dynamically assign a bus number.
1366 *
David Brownell6e13e642007-05-01 23:26:31 +02001367 * If no devices have pre-been declared for this bus, then be sure to
1368 * register the adapter before any dynamically allocated ones. Otherwise
1369 * the required bus ID may not be available.
1370 *
1371 * When this returns zero, the specified adapter became available for
1372 * clients using the bus number provided in adap->nr. Also, the table
1373 * of I2C devices pre-declared using i2c_register_board_info() is scanned,
1374 * and the appropriate driver model device nodes are created. Otherwise, a
1375 * negative errno value is returned.
1376 */
1377int i2c_add_numbered_adapter(struct i2c_adapter *adap)
1378{
Grant Likely488bf312011-07-25 17:49:43 +02001379 if (adap->nr == -1) /* -1 means dynamically assign bus id */
1380 return i2c_add_adapter(adap);
David Brownell6e13e642007-05-01 23:26:31 +02001381
Doug Andersonee5c2742013-03-01 08:57:31 -08001382 return __i2c_add_numbered_adapter(adap);
David Brownell6e13e642007-05-01 23:26:31 +02001383}
1384EXPORT_SYMBOL_GPL(i2c_add_numbered_adapter);
1385
Lars-Peter Clausen19baba42013-03-09 08:16:44 +00001386static void i2c_do_del_adapter(struct i2c_driver *driver,
Jean Delvare69b00892009-12-06 17:06:27 +01001387 struct i2c_adapter *adapter)
Jean Delvare026526f2008-01-27 18:14:49 +01001388{
Jean Delvare4735c982008-07-14 22:38:36 +02001389 struct i2c_client *client, *_n;
Jean Delvare026526f2008-01-27 18:14:49 +01001390
Jean Delvareacec2112009-03-28 21:34:40 +01001391 /* Remove the devices we created ourselves as the result of hardware
1392 * probing (using a driver's detect method) */
Jean Delvare4735c982008-07-14 22:38:36 +02001393 list_for_each_entry_safe(client, _n, &driver->clients, detected) {
1394 if (client->adapter == adapter) {
1395 dev_dbg(&adapter->dev, "Removing %s at 0x%x\n",
1396 client->name, client->addr);
1397 list_del(&client->detected);
1398 i2c_unregister_device(client);
1399 }
1400 }
Jean Delvare026526f2008-01-27 18:14:49 +01001401}
1402
Jean Delvaree549c2b2009-06-19 16:58:19 +02001403static int __unregister_client(struct device *dev, void *dummy)
1404{
1405 struct i2c_client *client = i2c_verify_client(dev);
Jean Delvare5219bf82011-01-14 22:03:49 +01001406 if (client && strcmp(client->name, "dummy"))
1407 i2c_unregister_device(client);
1408 return 0;
1409}
1410
1411static int __unregister_dummy(struct device *dev, void *dummy)
1412{
1413 struct i2c_client *client = i2c_verify_client(dev);
Jean Delvaree549c2b2009-06-19 16:58:19 +02001414 if (client)
1415 i2c_unregister_device(client);
1416 return 0;
1417}
1418
Jean Delvare69b00892009-12-06 17:06:27 +01001419static int __process_removed_adapter(struct device_driver *d, void *data)
1420{
Lars-Peter Clausen19baba42013-03-09 08:16:44 +00001421 i2c_do_del_adapter(to_i2c_driver(d), data);
1422 return 0;
Jean Delvare69b00892009-12-06 17:06:27 +01001423}
1424
David Brownelld64f73b2007-07-12 14:12:28 +02001425/**
1426 * i2c_del_adapter - unregister I2C adapter
1427 * @adap: the adapter being unregistered
1428 * Context: can sleep
1429 *
1430 * This unregisters an I2C adapter which was previously registered
1431 * by @i2c_add_adapter or @i2c_add_numbered_adapter.
1432 */
Lars-Peter Clausen71546302013-03-09 08:16:47 +00001433void i2c_del_adapter(struct i2c_adapter *adap)
Linus Torvalds1da177e2005-04-16 15:20:36 -07001434{
Jean Delvare35fc37f2009-06-19 16:58:19 +02001435 struct i2c_adapter *found;
Jean Delvarebbd2d9c2009-11-26 09:22:33 +01001436 struct i2c_client *client, *next;
Linus Torvalds1da177e2005-04-16 15:20:36 -07001437
1438 /* First make sure that this adapter was ever added */
Jean Delvare35fc37f2009-06-19 16:58:19 +02001439 mutex_lock(&core_lock);
1440 found = idr_find(&i2c_adapter_idr, adap->nr);
1441 mutex_unlock(&core_lock);
1442 if (found != adap) {
Jean Delvareb6d7b3d2005-07-31 19:02:53 +02001443 pr_debug("i2c-core: attempting to delete unregistered "
1444 "adapter [%s]\n", adap->name);
Lars-Peter Clausen71546302013-03-09 08:16:47 +00001445 return;
Linus Torvalds1da177e2005-04-16 15:20:36 -07001446 }
1447
Jean Delvare026526f2008-01-27 18:14:49 +01001448 /* Tell drivers about this removal */
Jean Delvare35fc37f2009-06-19 16:58:19 +02001449 mutex_lock(&core_lock);
Lars-Peter Clausen19baba42013-03-09 08:16:44 +00001450 bus_for_each_drv(&i2c_bus_type, NULL, adap,
Jean Delvare69b00892009-12-06 17:06:27 +01001451 __process_removed_adapter);
Jean Delvare35fc37f2009-06-19 16:58:19 +02001452 mutex_unlock(&core_lock);
Linus Torvalds1da177e2005-04-16 15:20:36 -07001453
Jean Delvarebbd2d9c2009-11-26 09:22:33 +01001454 /* Remove devices instantiated from sysfs */
Jean Delvare390946b2012-09-10 10:14:02 +02001455 mutex_lock_nested(&adap->userspace_clients_lock,
1456 i2c_adapter_depth(adap));
Jean Delvare6629dcf2010-05-04 11:09:28 +02001457 list_for_each_entry_safe(client, next, &adap->userspace_clients,
1458 detected) {
1459 dev_dbg(&adap->dev, "Removing %s at 0x%x\n", client->name,
1460 client->addr);
1461 list_del(&client->detected);
1462 i2c_unregister_device(client);
Jean Delvarebbd2d9c2009-11-26 09:22:33 +01001463 }
Jean Delvaredafc50d2010-08-11 18:21:01 +02001464 mutex_unlock(&adap->userspace_clients_lock);
Jean Delvarebbd2d9c2009-11-26 09:22:33 +01001465
Jean Delvaree549c2b2009-06-19 16:58:19 +02001466 /* Detach any active clients. This can't fail, thus we do not
Jean Delvare5219bf82011-01-14 22:03:49 +01001467 * check the returned value. This is a two-pass process, because
1468 * we can't remove the dummy devices during the first pass: they
1469 * could have been instantiated by real devices wishing to clean
1470 * them up properly, so we give them a chance to do that first. */
Lars-Peter Clausen19baba42013-03-09 08:16:44 +00001471 device_for_each_child(&adap->dev, NULL, __unregister_client);
1472 device_for_each_child(&adap->dev, NULL, __unregister_dummy);
Linus Torvalds1da177e2005-04-16 15:20:36 -07001473
Jean Delvare2bb50952009-09-18 22:45:46 +02001474#ifdef CONFIG_I2C_COMPAT
1475 class_compat_remove_link(i2c_adapter_compat_class, &adap->dev,
1476 adap->dev.parent);
1477#endif
1478
Thadeu Lima de Souza Cascardoc5567522010-01-16 20:43:13 +01001479 /* device name is gone after device_unregister */
1480 dev_dbg(&adap->dev, "adapter [%s] unregistered\n", adap->name);
1481
Linus Torvalds1da177e2005-04-16 15:20:36 -07001482 /* clean up the sysfs representation */
1483 init_completion(&adap->dev_released);
Linus Torvalds1da177e2005-04-16 15:20:36 -07001484 device_unregister(&adap->dev);
Linus Torvalds1da177e2005-04-16 15:20:36 -07001485
1486 /* wait for sysfs to drop all references */
1487 wait_for_completion(&adap->dev_released);
Linus Torvalds1da177e2005-04-16 15:20:36 -07001488
David Brownell6e13e642007-05-01 23:26:31 +02001489 /* free bus id */
Jean Delvare35fc37f2009-06-19 16:58:19 +02001490 mutex_lock(&core_lock);
Linus Torvalds1da177e2005-04-16 15:20:36 -07001491 idr_remove(&i2c_adapter_idr, adap->nr);
Jean Delvare35fc37f2009-06-19 16:58:19 +02001492 mutex_unlock(&core_lock);
Linus Torvalds1da177e2005-04-16 15:20:36 -07001493
Jean Delvarebd4bc3db2008-07-16 19:30:05 +02001494 /* Clear the device structure in case this adapter is ever going to be
1495 added again */
1496 memset(&adap->dev, 0, sizeof(adap->dev));
Linus Torvalds1da177e2005-04-16 15:20:36 -07001497}
David Brownellc0564602007-05-01 23:26:31 +02001498EXPORT_SYMBOL(i2c_del_adapter);
Linus Torvalds1da177e2005-04-16 15:20:36 -07001499
David Brownell7b4fbc52007-05-01 23:26:30 +02001500/* ------------------------------------------------------------------------- */
1501
Jean Delvare7ae31482011-03-20 14:50:52 +01001502int i2c_for_each_dev(void *data, int (*fn)(struct device *, void *))
1503{
1504 int res;
1505
1506 mutex_lock(&core_lock);
1507 res = bus_for_each_dev(&i2c_bus_type, NULL, data, fn);
1508 mutex_unlock(&core_lock);
1509
1510 return res;
1511}
1512EXPORT_SYMBOL_GPL(i2c_for_each_dev);
1513
Jean Delvare69b00892009-12-06 17:06:27 +01001514static int __process_new_driver(struct device *dev, void *data)
Dave Young7f101a92008-07-14 22:38:19 +02001515{
Jean Delvare4f8cf822009-09-18 22:45:46 +02001516 if (dev->type != &i2c_adapter_type)
1517 return 0;
Jean Delvare69b00892009-12-06 17:06:27 +01001518 return i2c_do_add_adapter(data, to_i2c_adapter(dev));
Dave Young7f101a92008-07-14 22:38:19 +02001519}
1520
David Brownell7b4fbc52007-05-01 23:26:30 +02001521/*
1522 * An i2c_driver is used with one or more i2c_client (device) nodes to access
Jean Delvare729d6dd2009-06-19 16:58:18 +02001523 * i2c slave chips, on a bus instance associated with some i2c_adapter.
Linus Torvalds1da177e2005-04-16 15:20:36 -07001524 */
1525
Greg Kroah-Hartmande59cf92005-12-06 15:33:15 -08001526int i2c_register_driver(struct module *owner, struct i2c_driver *driver)
Linus Torvalds1da177e2005-04-16 15:20:36 -07001527{
Jean Delvare7eebcb72006-02-05 23:28:21 +01001528 int res;
Linus Torvalds1da177e2005-04-16 15:20:36 -07001529
David Brownell1d0b19c2008-10-14 17:30:05 +02001530 /* Can't register until after driver model init */
1531 if (unlikely(WARN_ON(!i2c_bus_type.p)))
1532 return -EAGAIN;
1533
Linus Torvalds1da177e2005-04-16 15:20:36 -07001534 /* add the driver to the list of i2c drivers in the driver core */
Greg Kroah-Hartmande59cf92005-12-06 15:33:15 -08001535 driver->driver.owner = owner;
Linus Torvalds1da177e2005-04-16 15:20:36 -07001536 driver->driver.bus = &i2c_bus_type;
Linus Torvalds1da177e2005-04-16 15:20:36 -07001537
Jean Delvare729d6dd2009-06-19 16:58:18 +02001538 /* When registration returns, the driver core
David Brownell6e13e642007-05-01 23:26:31 +02001539 * will have called probe() for all matching-but-unbound devices.
1540 */
Linus Torvalds1da177e2005-04-16 15:20:36 -07001541 res = driver_register(&driver->driver);
1542 if (res)
Jean Delvare7eebcb72006-02-05 23:28:21 +01001543 return res;
David Brownell438d6c22006-12-10 21:21:31 +01001544
Mark Brownf4e8db32011-01-14 22:03:50 +01001545 /* Drivers should switch to dev_pm_ops instead. */
1546 if (driver->suspend)
1547 pr_warn("i2c-core: driver [%s] using legacy suspend method\n",
1548 driver->driver.name);
1549 if (driver->resume)
1550 pr_warn("i2c-core: driver [%s] using legacy resume method\n",
1551 driver->driver.name);
1552
Laurent Riffard35d8b2e2005-11-26 20:34:05 +01001553 pr_debug("i2c-core: driver [%s] registered\n", driver->driver.name);
Linus Torvalds1da177e2005-04-16 15:20:36 -07001554
Jean Delvare4735c982008-07-14 22:38:36 +02001555 INIT_LIST_HEAD(&driver->clients);
1556 /* Walk the adapters that are already present */
Jean Delvare7ae31482011-03-20 14:50:52 +01001557 i2c_for_each_dev(driver, __process_new_driver);
Jean Delvare35fc37f2009-06-19 16:58:19 +02001558
Jean Delvare7eebcb72006-02-05 23:28:21 +01001559 return 0;
Linus Torvalds1da177e2005-04-16 15:20:36 -07001560}
Greg Kroah-Hartmande59cf92005-12-06 15:33:15 -08001561EXPORT_SYMBOL(i2c_register_driver);
Linus Torvalds1da177e2005-04-16 15:20:36 -07001562
Jean Delvare69b00892009-12-06 17:06:27 +01001563static int __process_removed_driver(struct device *dev, void *data)
Dave Young7f101a92008-07-14 22:38:19 +02001564{
Lars-Peter Clausen19baba42013-03-09 08:16:44 +00001565 if (dev->type == &i2c_adapter_type)
1566 i2c_do_del_adapter(data, to_i2c_adapter(dev));
1567 return 0;
Dave Young7f101a92008-07-14 22:38:19 +02001568}
1569
David Brownella1d9e6e2007-05-01 23:26:30 +02001570/**
1571 * i2c_del_driver - unregister I2C driver
1572 * @driver: the driver being unregistered
David Brownelld64f73b2007-07-12 14:12:28 +02001573 * Context: can sleep
David Brownella1d9e6e2007-05-01 23:26:30 +02001574 */
Jean Delvareb3e82092007-05-01 23:26:32 +02001575void i2c_del_driver(struct i2c_driver *driver)
Linus Torvalds1da177e2005-04-16 15:20:36 -07001576{
Jean Delvare7ae31482011-03-20 14:50:52 +01001577 i2c_for_each_dev(driver, __process_removed_driver);
David Brownella1d9e6e2007-05-01 23:26:30 +02001578
Linus Torvalds1da177e2005-04-16 15:20:36 -07001579 driver_unregister(&driver->driver);
Laurent Riffard35d8b2e2005-11-26 20:34:05 +01001580 pr_debug("i2c-core: driver [%s] unregistered\n", driver->driver.name);
Linus Torvalds1da177e2005-04-16 15:20:36 -07001581}
David Brownellc0564602007-05-01 23:26:31 +02001582EXPORT_SYMBOL(i2c_del_driver);
Linus Torvalds1da177e2005-04-16 15:20:36 -07001583
David Brownell7b4fbc52007-05-01 23:26:30 +02001584/* ------------------------------------------------------------------------- */
1585
Jean Delvaree48d3312008-01-27 18:14:48 +01001586/**
1587 * i2c_use_client - increments the reference count of the i2c client structure
1588 * @client: the client being referenced
1589 *
1590 * Each live reference to a client should be refcounted. The driver model does
1591 * that automatically as part of driver binding, so that most drivers don't
1592 * need to do this explicitly: they hold a reference until they're unbound
1593 * from the device.
1594 *
1595 * A pointer to the client with the incremented reference counter is returned.
1596 */
1597struct i2c_client *i2c_use_client(struct i2c_client *client)
Linus Torvalds1da177e2005-04-16 15:20:36 -07001598{
David Brownell6ea438e2008-07-14 22:38:24 +02001599 if (client && get_device(&client->dev))
1600 return client;
1601 return NULL;
Linus Torvalds1da177e2005-04-16 15:20:36 -07001602}
David Brownellc0564602007-05-01 23:26:31 +02001603EXPORT_SYMBOL(i2c_use_client);
Linus Torvalds1da177e2005-04-16 15:20:36 -07001604
Jean Delvaree48d3312008-01-27 18:14:48 +01001605/**
1606 * i2c_release_client - release a use of the i2c client structure
1607 * @client: the client being no longer referenced
1608 *
1609 * Must be called when a user of a client is finished with it.
1610 */
1611void i2c_release_client(struct i2c_client *client)
Linus Torvalds1da177e2005-04-16 15:20:36 -07001612{
David Brownell6ea438e2008-07-14 22:38:24 +02001613 if (client)
1614 put_device(&client->dev);
Linus Torvalds1da177e2005-04-16 15:20:36 -07001615}
David Brownellc0564602007-05-01 23:26:31 +02001616EXPORT_SYMBOL(i2c_release_client);
Linus Torvalds1da177e2005-04-16 15:20:36 -07001617
David Brownell9b766b82008-01-27 18:14:51 +01001618struct i2c_cmd_arg {
1619 unsigned cmd;
1620 void *arg;
1621};
1622
1623static int i2c_cmd(struct device *dev, void *_arg)
1624{
1625 struct i2c_client *client = i2c_verify_client(dev);
1626 struct i2c_cmd_arg *arg = _arg;
Lars-Peter Clausen0acc2b32013-09-29 10:51:06 +02001627 struct i2c_driver *driver;
David Brownell9b766b82008-01-27 18:14:51 +01001628
Lars-Peter Clausen0acc2b32013-09-29 10:51:06 +02001629 if (!client || !client->dev.driver)
1630 return 0;
1631
1632 driver = to_i2c_driver(client->dev.driver);
1633 if (driver->command)
1634 driver->command(client, arg->cmd, arg->arg);
David Brownell9b766b82008-01-27 18:14:51 +01001635 return 0;
1636}
1637
Linus Torvalds1da177e2005-04-16 15:20:36 -07001638void i2c_clients_command(struct i2c_adapter *adap, unsigned int cmd, void *arg)
1639{
David Brownell9b766b82008-01-27 18:14:51 +01001640 struct i2c_cmd_arg cmd_arg;
Linus Torvalds1da177e2005-04-16 15:20:36 -07001641
David Brownell9b766b82008-01-27 18:14:51 +01001642 cmd_arg.cmd = cmd;
1643 cmd_arg.arg = arg;
1644 device_for_each_child(&adap->dev, &cmd_arg, i2c_cmd);
Linus Torvalds1da177e2005-04-16 15:20:36 -07001645}
David Brownellc0564602007-05-01 23:26:31 +02001646EXPORT_SYMBOL(i2c_clients_command);
Linus Torvalds1da177e2005-04-16 15:20:36 -07001647
1648static int __init i2c_init(void)
1649{
1650 int retval;
1651
1652 retval = bus_register(&i2c_bus_type);
1653 if (retval)
1654 return retval;
Jean Delvare2bb50952009-09-18 22:45:46 +02001655#ifdef CONFIG_I2C_COMPAT
1656 i2c_adapter_compat_class = class_compat_register("i2c-adapter");
1657 if (!i2c_adapter_compat_class) {
1658 retval = -ENOMEM;
1659 goto bus_err;
1660 }
1661#endif
David Brownelle9f13732008-01-27 18:14:52 +01001662 retval = i2c_add_driver(&dummy_driver);
1663 if (retval)
Jean Delvare2bb50952009-09-18 22:45:46 +02001664 goto class_err;
David Brownelle9f13732008-01-27 18:14:52 +01001665 return 0;
1666
Jean Delvare2bb50952009-09-18 22:45:46 +02001667class_err:
1668#ifdef CONFIG_I2C_COMPAT
1669 class_compat_unregister(i2c_adapter_compat_class);
David Brownelle9f13732008-01-27 18:14:52 +01001670bus_err:
Jean Delvare2bb50952009-09-18 22:45:46 +02001671#endif
David Brownelle9f13732008-01-27 18:14:52 +01001672 bus_unregister(&i2c_bus_type);
1673 return retval;
Linus Torvalds1da177e2005-04-16 15:20:36 -07001674}
1675
1676static void __exit i2c_exit(void)
1677{
David Brownelle9f13732008-01-27 18:14:52 +01001678 i2c_del_driver(&dummy_driver);
Jean Delvare2bb50952009-09-18 22:45:46 +02001679#ifdef CONFIG_I2C_COMPAT
1680 class_compat_unregister(i2c_adapter_compat_class);
1681#endif
Linus Torvalds1da177e2005-04-16 15:20:36 -07001682 bus_unregister(&i2c_bus_type);
1683}
1684
David Brownella10f9e72008-10-14 17:30:06 +02001685/* We must initialize early, because some subsystems register i2c drivers
1686 * in subsys_initcall() code, but are linked (and initialized) before i2c.
1687 */
1688postcore_initcall(i2c_init);
Linus Torvalds1da177e2005-04-16 15:20:36 -07001689module_exit(i2c_exit);
1690
1691/* ----------------------------------------------------
1692 * the functional interface to the i2c busses.
1693 * ----------------------------------------------------
1694 */
1695
David Brownella1cdeda2008-07-14 22:38:24 +02001696/**
Jean Delvareb37d2a32012-06-29 07:47:19 -03001697 * __i2c_transfer - unlocked flavor of i2c_transfer
1698 * @adap: Handle to I2C bus
1699 * @msgs: One or more messages to execute before STOP is issued to
1700 * terminate the operation; each message begins with a START.
1701 * @num: Number of messages to be executed.
1702 *
1703 * Returns negative errno, else the number of messages executed.
1704 *
1705 * Adapter lock must be held when calling this function. No debug logging
1706 * takes place. adap->algo->master_xfer existence isn't checked.
1707 */
1708int __i2c_transfer(struct i2c_adapter *adap, struct i2c_msg *msgs, int num)
1709{
1710 unsigned long orig_jiffies;
1711 int ret, try;
1712
1713 /* Retry automatically on arbitration loss */
1714 orig_jiffies = jiffies;
1715 for (ret = 0, try = 0; try <= adap->retries; try++) {
1716 ret = adap->algo->master_xfer(adap, msgs, num);
1717 if (ret != -EAGAIN)
1718 break;
1719 if (time_after(jiffies, orig_jiffies + adap->timeout))
1720 break;
1721 }
1722
1723 return ret;
1724}
1725EXPORT_SYMBOL(__i2c_transfer);
1726
1727/**
David Brownella1cdeda2008-07-14 22:38:24 +02001728 * i2c_transfer - execute a single or combined I2C message
1729 * @adap: Handle to I2C bus
1730 * @msgs: One or more messages to execute before STOP is issued to
1731 * terminate the operation; each message begins with a START.
1732 * @num: Number of messages to be executed.
1733 *
1734 * Returns negative errno, else the number of messages executed.
1735 *
1736 * Note that there is no requirement that each message be sent to
1737 * the same slave address, although that is the most common model.
1738 */
Zhenwen Xu09b8ce02009-03-28 21:34:46 +01001739int i2c_transfer(struct i2c_adapter *adap, struct i2c_msg *msgs, int num)
Linus Torvalds1da177e2005-04-16 15:20:36 -07001740{
Jean Delvareb37d2a32012-06-29 07:47:19 -03001741 int ret;
Linus Torvalds1da177e2005-04-16 15:20:36 -07001742
David Brownella1cdeda2008-07-14 22:38:24 +02001743 /* REVISIT the fault reporting model here is weak:
1744 *
1745 * - When we get an error after receiving N bytes from a slave,
1746 * there is no way to report "N".
1747 *
1748 * - When we get a NAK after transmitting N bytes to a slave,
1749 * there is no way to report "N" ... or to let the master
1750 * continue executing the rest of this combined message, if
1751 * that's the appropriate response.
1752 *
1753 * - When for example "num" is two and we successfully complete
1754 * the first message but get an error part way through the
1755 * second, it's unclear whether that should be reported as
1756 * one (discarding status on the second message) or errno
1757 * (discarding status on the first one).
1758 */
1759
Linus Torvalds1da177e2005-04-16 15:20:36 -07001760 if (adap->algo->master_xfer) {
1761#ifdef DEBUG
1762 for (ret = 0; ret < num; ret++) {
1763 dev_dbg(&adap->dev, "master_xfer[%d] %c, addr=0x%02x, "
Jean Delvare209d27c2007-05-01 23:26:29 +02001764 "len=%d%s\n", ret, (msgs[ret].flags & I2C_M_RD)
1765 ? 'R' : 'W', msgs[ret].addr, msgs[ret].len,
1766 (msgs[ret].flags & I2C_M_RECV_LEN) ? "+" : "");
Linus Torvalds1da177e2005-04-16 15:20:36 -07001767 }
1768#endif
1769
Mike Rapoportcea443a2008-01-27 18:14:50 +01001770 if (in_atomic() || irqs_disabled()) {
Jean Delvarefe61e072010-08-11 18:20:58 +02001771 ret = i2c_trylock_adapter(adap);
Mike Rapoportcea443a2008-01-27 18:14:50 +01001772 if (!ret)
1773 /* I2C activity is ongoing. */
1774 return -EAGAIN;
1775 } else {
Jean Delvarefe61e072010-08-11 18:20:58 +02001776 i2c_lock_adapter(adap);
Mike Rapoportcea443a2008-01-27 18:14:50 +01001777 }
1778
Jean Delvareb37d2a32012-06-29 07:47:19 -03001779 ret = __i2c_transfer(adap, msgs, num);
Jean Delvarefe61e072010-08-11 18:20:58 +02001780 i2c_unlock_adapter(adap);
Linus Torvalds1da177e2005-04-16 15:20:36 -07001781
1782 return ret;
1783 } else {
1784 dev_dbg(&adap->dev, "I2C level transfers not supported\n");
David Brownell24a5bb72008-07-14 22:38:23 +02001785 return -EOPNOTSUPP;
Linus Torvalds1da177e2005-04-16 15:20:36 -07001786 }
1787}
David Brownellc0564602007-05-01 23:26:31 +02001788EXPORT_SYMBOL(i2c_transfer);
Linus Torvalds1da177e2005-04-16 15:20:36 -07001789
David Brownella1cdeda2008-07-14 22:38:24 +02001790/**
1791 * i2c_master_send - issue a single I2C message in master transmit mode
1792 * @client: Handle to slave device
1793 * @buf: Data that will be written to the slave
Zhangfei Gao0c43ea52010-03-02 12:23:49 +01001794 * @count: How many bytes to write, must be less than 64k since msg.len is u16
David Brownella1cdeda2008-07-14 22:38:24 +02001795 *
1796 * Returns negative errno, or else the number of bytes written.
1797 */
Jean Delvare0cc43a12011-01-10 22:11:23 +01001798int i2c_master_send(const struct i2c_client *client, const char *buf, int count)
Linus Torvalds1da177e2005-04-16 15:20:36 -07001799{
1800 int ret;
Farid Hammane7225acf2010-05-21 18:40:58 +02001801 struct i2c_adapter *adap = client->adapter;
Linus Torvalds1da177e2005-04-16 15:20:36 -07001802 struct i2c_msg msg;
1803
Jean Delvare815f55f2005-05-07 22:58:46 +02001804 msg.addr = client->addr;
1805 msg.flags = client->flags & I2C_M_TEN;
1806 msg.len = count;
1807 msg.buf = (char *)buf;
David Brownell438d6c22006-12-10 21:21:31 +01001808
Jean Delvare815f55f2005-05-07 22:58:46 +02001809 ret = i2c_transfer(adap, &msg, 1);
Linus Torvalds1da177e2005-04-16 15:20:36 -07001810
Wolfram Sang834aa6f2012-03-15 18:11:05 +01001811 /*
1812 * If everything went ok (i.e. 1 msg transmitted), return #bytes
1813 * transmitted, else error code.
1814 */
Jean Delvare815f55f2005-05-07 22:58:46 +02001815 return (ret == 1) ? count : ret;
Linus Torvalds1da177e2005-04-16 15:20:36 -07001816}
David Brownellc0564602007-05-01 23:26:31 +02001817EXPORT_SYMBOL(i2c_master_send);
Linus Torvalds1da177e2005-04-16 15:20:36 -07001818
David Brownella1cdeda2008-07-14 22:38:24 +02001819/**
1820 * i2c_master_recv - issue a single I2C message in master receive mode
1821 * @client: Handle to slave device
1822 * @buf: Where to store data read from slave
Zhangfei Gao0c43ea52010-03-02 12:23:49 +01001823 * @count: How many bytes to read, must be less than 64k since msg.len is u16
David Brownella1cdeda2008-07-14 22:38:24 +02001824 *
1825 * Returns negative errno, or else the number of bytes read.
1826 */
Jean Delvare0cc43a12011-01-10 22:11:23 +01001827int i2c_master_recv(const struct i2c_client *client, char *buf, int count)
Linus Torvalds1da177e2005-04-16 15:20:36 -07001828{
Farid Hammane7225acf2010-05-21 18:40:58 +02001829 struct i2c_adapter *adap = client->adapter;
Linus Torvalds1da177e2005-04-16 15:20:36 -07001830 struct i2c_msg msg;
1831 int ret;
Linus Torvalds1da177e2005-04-16 15:20:36 -07001832
Jean Delvare815f55f2005-05-07 22:58:46 +02001833 msg.addr = client->addr;
1834 msg.flags = client->flags & I2C_M_TEN;
1835 msg.flags |= I2C_M_RD;
1836 msg.len = count;
1837 msg.buf = buf;
1838
1839 ret = i2c_transfer(adap, &msg, 1);
1840
Wolfram Sang834aa6f2012-03-15 18:11:05 +01001841 /*
1842 * If everything went ok (i.e. 1 msg received), return #bytes received,
1843 * else error code.
1844 */
Jean Delvare815f55f2005-05-07 22:58:46 +02001845 return (ret == 1) ? count : ret;
Linus Torvalds1da177e2005-04-16 15:20:36 -07001846}
David Brownellc0564602007-05-01 23:26:31 +02001847EXPORT_SYMBOL(i2c_master_recv);
Linus Torvalds1da177e2005-04-16 15:20:36 -07001848
Linus Torvalds1da177e2005-04-16 15:20:36 -07001849/* ----------------------------------------------------
1850 * the i2c address scanning function
1851 * Will not work for 10-bit addresses!
1852 * ----------------------------------------------------
1853 */
Jean Delvare9fc6adf2005-07-31 21:20:43 +02001854
Jean Delvare63e4e802010-06-03 11:33:51 +02001855/*
1856 * Legacy default probe function, mostly relevant for SMBus. The default
1857 * probe method is a quick write, but it is known to corrupt the 24RF08
1858 * EEPROMs due to a state machine bug, and could also irreversibly
1859 * write-protect some EEPROMs, so for address ranges 0x30-0x37 and 0x50-0x5f,
1860 * we use a short byte read instead. Also, some bus drivers don't implement
1861 * quick write, so we fallback to a byte read in that case too.
1862 * On x86, there is another special case for FSC hardware monitoring chips,
1863 * which want regular byte reads (address 0x73.) Fortunately, these are the
1864 * only known chips using this I2C address on PC hardware.
1865 * Returns 1 if probe succeeded, 0 if not.
1866 */
1867static int i2c_default_probe(struct i2c_adapter *adap, unsigned short addr)
1868{
1869 int err;
1870 union i2c_smbus_data dummy;
1871
1872#ifdef CONFIG_X86
1873 if (addr == 0x73 && (adap->class & I2C_CLASS_HWMON)
1874 && i2c_check_functionality(adap, I2C_FUNC_SMBUS_READ_BYTE_DATA))
1875 err = i2c_smbus_xfer(adap, addr, 0, I2C_SMBUS_READ, 0,
1876 I2C_SMBUS_BYTE_DATA, &dummy);
1877 else
1878#endif
Jean Delvare8031d792010-08-11 18:21:00 +02001879 if (!((addr & ~0x07) == 0x30 || (addr & ~0x0f) == 0x50)
1880 && i2c_check_functionality(adap, I2C_FUNC_SMBUS_QUICK))
Jean Delvare63e4e802010-06-03 11:33:51 +02001881 err = i2c_smbus_xfer(adap, addr, 0, I2C_SMBUS_WRITE, 0,
1882 I2C_SMBUS_QUICK, NULL);
Jean Delvare8031d792010-08-11 18:21:00 +02001883 else if (i2c_check_functionality(adap, I2C_FUNC_SMBUS_READ_BYTE))
1884 err = i2c_smbus_xfer(adap, addr, 0, I2C_SMBUS_READ, 0,
1885 I2C_SMBUS_BYTE, &dummy);
1886 else {
Andy Lutomirskid63a9e82013-07-17 13:27:59 -07001887 dev_warn(&adap->dev, "No suitable probing method supported for address 0x%02X\n",
1888 addr);
Jean Delvare8031d792010-08-11 18:21:00 +02001889 err = -EOPNOTSUPP;
1890 }
Jean Delvare63e4e802010-06-03 11:33:51 +02001891
1892 return err >= 0;
1893}
1894
Jean Delvareccfbbd02009-12-06 17:06:25 +01001895static int i2c_detect_address(struct i2c_client *temp_client,
Jean Delvare4735c982008-07-14 22:38:36 +02001896 struct i2c_driver *driver)
1897{
1898 struct i2c_board_info info;
1899 struct i2c_adapter *adapter = temp_client->adapter;
1900 int addr = temp_client->addr;
1901 int err;
1902
1903 /* Make sure the address is valid */
Jean Delvare656b8762010-06-03 11:33:53 +02001904 err = i2c_check_addr_validity(addr);
1905 if (err) {
Jean Delvare4735c982008-07-14 22:38:36 +02001906 dev_warn(&adapter->dev, "Invalid probe address 0x%02x\n",
1907 addr);
Jean Delvare656b8762010-06-03 11:33:53 +02001908 return err;
Jean Delvare4735c982008-07-14 22:38:36 +02001909 }
1910
1911 /* Skip if already in use */
Jean Delvare3b5f7942010-06-03 11:33:55 +02001912 if (i2c_check_addr_busy(adapter, addr))
Jean Delvare4735c982008-07-14 22:38:36 +02001913 return 0;
1914
Jean Delvareccfbbd02009-12-06 17:06:25 +01001915 /* Make sure there is something at this address */
Jean Delvare63e4e802010-06-03 11:33:51 +02001916 if (!i2c_default_probe(adapter, addr))
1917 return 0;
Jean Delvare4735c982008-07-14 22:38:36 +02001918
1919 /* Finally call the custom detection function */
1920 memset(&info, 0, sizeof(struct i2c_board_info));
1921 info.addr = addr;
Jean Delvare310ec792009-12-14 21:17:23 +01001922 err = driver->detect(temp_client, &info);
Jean Delvare4735c982008-07-14 22:38:36 +02001923 if (err) {
1924 /* -ENODEV is returned if the detection fails. We catch it
1925 here as this isn't an error. */
1926 return err == -ENODEV ? 0 : err;
1927 }
1928
1929 /* Consistency check */
1930 if (info.type[0] == '\0') {
1931 dev_err(&adapter->dev, "%s detection function provided "
1932 "no name for 0x%x\n", driver->driver.name,
1933 addr);
1934 } else {
1935 struct i2c_client *client;
1936
1937 /* Detection succeeded, instantiate the device */
1938 dev_dbg(&adapter->dev, "Creating %s at 0x%02x\n",
1939 info.type, info.addr);
1940 client = i2c_new_device(adapter, &info);
1941 if (client)
1942 list_add_tail(&client->detected, &driver->clients);
1943 else
1944 dev_err(&adapter->dev, "Failed creating %s at 0x%02x\n",
1945 info.type, info.addr);
1946 }
1947 return 0;
1948}
1949
1950static int i2c_detect(struct i2c_adapter *adapter, struct i2c_driver *driver)
1951{
Jean Delvarec3813d62009-12-14 21:17:25 +01001952 const unsigned short *address_list;
Jean Delvare4735c982008-07-14 22:38:36 +02001953 struct i2c_client *temp_client;
1954 int i, err = 0;
1955 int adap_id = i2c_adapter_id(adapter);
1956
Jean Delvarec3813d62009-12-14 21:17:25 +01001957 address_list = driver->address_list;
1958 if (!driver->detect || !address_list)
Jean Delvare4735c982008-07-14 22:38:36 +02001959 return 0;
1960
Jean Delvare51b54ba2010-10-24 18:16:58 +02001961 /* Stop here if the classes do not match */
1962 if (!(adapter->class & driver->class))
1963 return 0;
1964
Jean Delvare4735c982008-07-14 22:38:36 +02001965 /* Set up a temporary client to help detect callback */
1966 temp_client = kzalloc(sizeof(struct i2c_client), GFP_KERNEL);
1967 if (!temp_client)
1968 return -ENOMEM;
1969 temp_client->adapter = adapter;
1970
Jean Delvarec3813d62009-12-14 21:17:25 +01001971 for (i = 0; address_list[i] != I2C_CLIENT_END; i += 1) {
Jean Delvare4735c982008-07-14 22:38:36 +02001972 dev_dbg(&adapter->dev, "found normal entry for adapter %d, "
Jean Delvarec3813d62009-12-14 21:17:25 +01001973 "addr 0x%02x\n", adap_id, address_list[i]);
1974 temp_client->addr = address_list[i];
Jean Delvareccfbbd02009-12-06 17:06:25 +01001975 err = i2c_detect_address(temp_client, driver);
Jean Delvare51b54ba2010-10-24 18:16:58 +02001976 if (unlikely(err))
1977 break;
Jean Delvare4735c982008-07-14 22:38:36 +02001978 }
1979
Jean Delvare4735c982008-07-14 22:38:36 +02001980 kfree(temp_client);
1981 return err;
1982}
1983
Jean Delvared44f19d2010-08-11 18:20:57 +02001984int i2c_probe_func_quick_read(struct i2c_adapter *adap, unsigned short addr)
1985{
1986 return i2c_smbus_xfer(adap, addr, 0, I2C_SMBUS_READ, 0,
1987 I2C_SMBUS_QUICK, NULL) >= 0;
1988}
1989EXPORT_SYMBOL_GPL(i2c_probe_func_quick_read);
1990
Jean Delvare12b5053a2007-05-01 23:26:31 +02001991struct i2c_client *
1992i2c_new_probed_device(struct i2c_adapter *adap,
1993 struct i2c_board_info *info,
Jean Delvare9a942412010-08-11 18:20:56 +02001994 unsigned short const *addr_list,
1995 int (*probe)(struct i2c_adapter *, unsigned short addr))
Jean Delvare12b5053a2007-05-01 23:26:31 +02001996{
1997 int i;
1998
Jean Delvare8031d792010-08-11 18:21:00 +02001999 if (!probe)
Jean Delvare9a942412010-08-11 18:20:56 +02002000 probe = i2c_default_probe;
Jean Delvare12b5053a2007-05-01 23:26:31 +02002001
Jean Delvare12b5053a2007-05-01 23:26:31 +02002002 for (i = 0; addr_list[i] != I2C_CLIENT_END; i++) {
2003 /* Check address validity */
Jean Delvare656b8762010-06-03 11:33:53 +02002004 if (i2c_check_addr_validity(addr_list[i]) < 0) {
Jean Delvare12b5053a2007-05-01 23:26:31 +02002005 dev_warn(&adap->dev, "Invalid 7-bit address "
2006 "0x%02x\n", addr_list[i]);
2007 continue;
2008 }
2009
2010 /* Check address availability */
Jean Delvare3b5f7942010-06-03 11:33:55 +02002011 if (i2c_check_addr_busy(adap, addr_list[i])) {
Jean Delvare12b5053a2007-05-01 23:26:31 +02002012 dev_dbg(&adap->dev, "Address 0x%02x already in "
2013 "use, not probing\n", addr_list[i]);
2014 continue;
2015 }
2016
Jean Delvare63e4e802010-06-03 11:33:51 +02002017 /* Test address responsiveness */
Jean Delvare9a942412010-08-11 18:20:56 +02002018 if (probe(adap, addr_list[i]))
Jean Delvare63e4e802010-06-03 11:33:51 +02002019 break;
Jean Delvare12b5053a2007-05-01 23:26:31 +02002020 }
Jean Delvare12b5053a2007-05-01 23:26:31 +02002021
2022 if (addr_list[i] == I2C_CLIENT_END) {
2023 dev_dbg(&adap->dev, "Probing failed, no device found\n");
2024 return NULL;
2025 }
2026
2027 info->addr = addr_list[i];
2028 return i2c_new_device(adap, info);
2029}
2030EXPORT_SYMBOL_GPL(i2c_new_probed_device);
2031
Jean Delvared735b342011-03-20 14:50:52 +01002032struct i2c_adapter *i2c_get_adapter(int nr)
Linus Torvalds1da177e2005-04-16 15:20:36 -07002033{
Linus Torvalds1da177e2005-04-16 15:20:36 -07002034 struct i2c_adapter *adapter;
David Brownell438d6c22006-12-10 21:21:31 +01002035
Jean Delvarecaada322008-01-27 18:14:49 +01002036 mutex_lock(&core_lock);
Jean Delvared735b342011-03-20 14:50:52 +01002037 adapter = idr_find(&i2c_adapter_idr, nr);
Mark M. Hoffmana0920e12005-06-28 00:21:30 -04002038 if (adapter && !try_module_get(adapter->owner))
2039 adapter = NULL;
2040
Jean Delvarecaada322008-01-27 18:14:49 +01002041 mutex_unlock(&core_lock);
Mark M. Hoffmana0920e12005-06-28 00:21:30 -04002042 return adapter;
Linus Torvalds1da177e2005-04-16 15:20:36 -07002043}
David Brownellc0564602007-05-01 23:26:31 +02002044EXPORT_SYMBOL(i2c_get_adapter);
Linus Torvalds1da177e2005-04-16 15:20:36 -07002045
2046void i2c_put_adapter(struct i2c_adapter *adap)
2047{
Sebastian Hesselbarthc66c4cc2013-08-01 14:10:46 +02002048 if (adap)
2049 module_put(adap->owner);
Linus Torvalds1da177e2005-04-16 15:20:36 -07002050}
David Brownellc0564602007-05-01 23:26:31 +02002051EXPORT_SYMBOL(i2c_put_adapter);
Linus Torvalds1da177e2005-04-16 15:20:36 -07002052
2053/* The SMBus parts */
2054
David Brownell438d6c22006-12-10 21:21:31 +01002055#define POLY (0x1070U << 3)
Zhenwen Xu09b8ce02009-03-28 21:34:46 +01002056static u8 crc8(u16 data)
Linus Torvalds1da177e2005-04-16 15:20:36 -07002057{
2058 int i;
David Brownell438d6c22006-12-10 21:21:31 +01002059
Farid Hammane7225acf2010-05-21 18:40:58 +02002060 for (i = 0; i < 8; i++) {
David Brownell438d6c22006-12-10 21:21:31 +01002061 if (data & 0x8000)
Linus Torvalds1da177e2005-04-16 15:20:36 -07002062 data = data ^ POLY;
2063 data = data << 1;
2064 }
2065 return (u8)(data >> 8);
2066}
2067
Jean Delvare421ef472005-10-26 21:28:55 +02002068/* Incremental CRC8 over count bytes in the array pointed to by p */
2069static u8 i2c_smbus_pec(u8 crc, u8 *p, size_t count)
Linus Torvalds1da177e2005-04-16 15:20:36 -07002070{
2071 int i;
2072
Farid Hammane7225acf2010-05-21 18:40:58 +02002073 for (i = 0; i < count; i++)
Jean Delvare421ef472005-10-26 21:28:55 +02002074 crc = crc8((crc ^ p[i]) << 8);
Linus Torvalds1da177e2005-04-16 15:20:36 -07002075 return crc;
2076}
2077
Jean Delvare421ef472005-10-26 21:28:55 +02002078/* Assume a 7-bit address, which is reasonable for SMBus */
2079static u8 i2c_smbus_msg_pec(u8 pec, struct i2c_msg *msg)
Linus Torvalds1da177e2005-04-16 15:20:36 -07002080{
Jean Delvare421ef472005-10-26 21:28:55 +02002081 /* The address will be sent first */
2082 u8 addr = (msg->addr << 1) | !!(msg->flags & I2C_M_RD);
2083 pec = i2c_smbus_pec(pec, &addr, 1);
2084
2085 /* The data buffer follows */
2086 return i2c_smbus_pec(pec, msg->buf, msg->len);
Linus Torvalds1da177e2005-04-16 15:20:36 -07002087}
2088
Jean Delvare421ef472005-10-26 21:28:55 +02002089/* Used for write only transactions */
2090static inline void i2c_smbus_add_pec(struct i2c_msg *msg)
Linus Torvalds1da177e2005-04-16 15:20:36 -07002091{
Jean Delvare421ef472005-10-26 21:28:55 +02002092 msg->buf[msg->len] = i2c_smbus_msg_pec(0, msg);
2093 msg->len++;
Linus Torvalds1da177e2005-04-16 15:20:36 -07002094}
2095
Jean Delvare421ef472005-10-26 21:28:55 +02002096/* Return <0 on CRC error
2097 If there was a write before this read (most cases) we need to take the
2098 partial CRC from the write part into account.
2099 Note that this function does modify the message (we need to decrease the
2100 message length to hide the CRC byte from the caller). */
2101static int i2c_smbus_check_pec(u8 cpec, struct i2c_msg *msg)
Linus Torvalds1da177e2005-04-16 15:20:36 -07002102{
Jean Delvare421ef472005-10-26 21:28:55 +02002103 u8 rpec = msg->buf[--msg->len];
2104 cpec = i2c_smbus_msg_pec(cpec, msg);
Linus Torvalds1da177e2005-04-16 15:20:36 -07002105
Linus Torvalds1da177e2005-04-16 15:20:36 -07002106 if (rpec != cpec) {
2107 pr_debug("i2c-core: Bad PEC 0x%02x vs. 0x%02x\n",
2108 rpec, cpec);
David Brownell24a5bb72008-07-14 22:38:23 +02002109 return -EBADMSG;
Linus Torvalds1da177e2005-04-16 15:20:36 -07002110 }
David Brownell438d6c22006-12-10 21:21:31 +01002111 return 0;
Linus Torvalds1da177e2005-04-16 15:20:36 -07002112}
2113
David Brownella1cdeda2008-07-14 22:38:24 +02002114/**
2115 * i2c_smbus_read_byte - SMBus "receive byte" protocol
2116 * @client: Handle to slave device
2117 *
2118 * This executes the SMBus "receive byte" protocol, returning negative errno
2119 * else the byte received from the device.
2120 */
Jean Delvare0cc43a12011-01-10 22:11:23 +01002121s32 i2c_smbus_read_byte(const struct i2c_client *client)
Linus Torvalds1da177e2005-04-16 15:20:36 -07002122{
2123 union i2c_smbus_data data;
David Brownell24a5bb72008-07-14 22:38:23 +02002124 int status;
2125
2126 status = i2c_smbus_xfer(client->adapter, client->addr, client->flags,
2127 I2C_SMBUS_READ, 0,
2128 I2C_SMBUS_BYTE, &data);
2129 return (status < 0) ? status : data.byte;
Linus Torvalds1da177e2005-04-16 15:20:36 -07002130}
David Brownellc0564602007-05-01 23:26:31 +02002131EXPORT_SYMBOL(i2c_smbus_read_byte);
Linus Torvalds1da177e2005-04-16 15:20:36 -07002132
David Brownella1cdeda2008-07-14 22:38:24 +02002133/**
2134 * i2c_smbus_write_byte - SMBus "send byte" protocol
2135 * @client: Handle to slave device
2136 * @value: Byte to be sent
2137 *
2138 * This executes the SMBus "send byte" protocol, returning negative errno
2139 * else zero on success.
2140 */
Jean Delvare0cc43a12011-01-10 22:11:23 +01002141s32 i2c_smbus_write_byte(const struct i2c_client *client, u8 value)
Linus Torvalds1da177e2005-04-16 15:20:36 -07002142{
Farid Hammane7225acf2010-05-21 18:40:58 +02002143 return i2c_smbus_xfer(client->adapter, client->addr, client->flags,
Jean Delvare421ef472005-10-26 21:28:55 +02002144 I2C_SMBUS_WRITE, value, I2C_SMBUS_BYTE, NULL);
Linus Torvalds1da177e2005-04-16 15:20:36 -07002145}
David Brownellc0564602007-05-01 23:26:31 +02002146EXPORT_SYMBOL(i2c_smbus_write_byte);
Linus Torvalds1da177e2005-04-16 15:20:36 -07002147
David Brownella1cdeda2008-07-14 22:38:24 +02002148/**
2149 * i2c_smbus_read_byte_data - SMBus "read byte" protocol
2150 * @client: Handle to slave device
2151 * @command: Byte interpreted by slave
2152 *
2153 * This executes the SMBus "read byte" protocol, returning negative errno
2154 * else a data byte received from the device.
2155 */
Jean Delvare0cc43a12011-01-10 22:11:23 +01002156s32 i2c_smbus_read_byte_data(const struct i2c_client *client, u8 command)
Linus Torvalds1da177e2005-04-16 15:20:36 -07002157{
2158 union i2c_smbus_data data;
David Brownell24a5bb72008-07-14 22:38:23 +02002159 int status;
2160
2161 status = i2c_smbus_xfer(client->adapter, client->addr, client->flags,
2162 I2C_SMBUS_READ, command,
2163 I2C_SMBUS_BYTE_DATA, &data);
2164 return (status < 0) ? status : data.byte;
Linus Torvalds1da177e2005-04-16 15:20:36 -07002165}
David Brownellc0564602007-05-01 23:26:31 +02002166EXPORT_SYMBOL(i2c_smbus_read_byte_data);
Linus Torvalds1da177e2005-04-16 15:20:36 -07002167
David Brownella1cdeda2008-07-14 22:38:24 +02002168/**
2169 * i2c_smbus_write_byte_data - SMBus "write byte" protocol
2170 * @client: Handle to slave device
2171 * @command: Byte interpreted by slave
2172 * @value: Byte being written
2173 *
2174 * This executes the SMBus "write byte" protocol, returning negative errno
2175 * else zero on success.
2176 */
Jean Delvare0cc43a12011-01-10 22:11:23 +01002177s32 i2c_smbus_write_byte_data(const struct i2c_client *client, u8 command,
2178 u8 value)
Linus Torvalds1da177e2005-04-16 15:20:36 -07002179{
2180 union i2c_smbus_data data;
2181 data.byte = value;
Farid Hammane7225acf2010-05-21 18:40:58 +02002182 return i2c_smbus_xfer(client->adapter, client->addr, client->flags,
2183 I2C_SMBUS_WRITE, command,
2184 I2C_SMBUS_BYTE_DATA, &data);
Linus Torvalds1da177e2005-04-16 15:20:36 -07002185}
David Brownellc0564602007-05-01 23:26:31 +02002186EXPORT_SYMBOL(i2c_smbus_write_byte_data);
Linus Torvalds1da177e2005-04-16 15:20:36 -07002187
David Brownella1cdeda2008-07-14 22:38:24 +02002188/**
2189 * i2c_smbus_read_word_data - SMBus "read word" protocol
2190 * @client: Handle to slave device
2191 * @command: Byte interpreted by slave
2192 *
2193 * This executes the SMBus "read word" protocol, returning negative errno
2194 * else a 16-bit unsigned "word" received from the device.
2195 */
Jean Delvare0cc43a12011-01-10 22:11:23 +01002196s32 i2c_smbus_read_word_data(const struct i2c_client *client, u8 command)
Linus Torvalds1da177e2005-04-16 15:20:36 -07002197{
2198 union i2c_smbus_data data;
David Brownell24a5bb72008-07-14 22:38:23 +02002199 int status;
2200
2201 status = i2c_smbus_xfer(client->adapter, client->addr, client->flags,
2202 I2C_SMBUS_READ, command,
2203 I2C_SMBUS_WORD_DATA, &data);
2204 return (status < 0) ? status : data.word;
Linus Torvalds1da177e2005-04-16 15:20:36 -07002205}
David Brownellc0564602007-05-01 23:26:31 +02002206EXPORT_SYMBOL(i2c_smbus_read_word_data);
Linus Torvalds1da177e2005-04-16 15:20:36 -07002207
David Brownella1cdeda2008-07-14 22:38:24 +02002208/**
2209 * i2c_smbus_write_word_data - SMBus "write word" protocol
2210 * @client: Handle to slave device
2211 * @command: Byte interpreted by slave
2212 * @value: 16-bit "word" being written
2213 *
2214 * This executes the SMBus "write word" protocol, returning negative errno
2215 * else zero on success.
2216 */
Jean Delvare0cc43a12011-01-10 22:11:23 +01002217s32 i2c_smbus_write_word_data(const struct i2c_client *client, u8 command,
2218 u16 value)
Linus Torvalds1da177e2005-04-16 15:20:36 -07002219{
2220 union i2c_smbus_data data;
2221 data.word = value;
Farid Hammane7225acf2010-05-21 18:40:58 +02002222 return i2c_smbus_xfer(client->adapter, client->addr, client->flags,
2223 I2C_SMBUS_WRITE, command,
2224 I2C_SMBUS_WORD_DATA, &data);
Linus Torvalds1da177e2005-04-16 15:20:36 -07002225}
David Brownellc0564602007-05-01 23:26:31 +02002226EXPORT_SYMBOL(i2c_smbus_write_word_data);
Linus Torvalds1da177e2005-04-16 15:20:36 -07002227
David Brownella64ec072007-10-13 23:56:31 +02002228/**
David Brownella1cdeda2008-07-14 22:38:24 +02002229 * i2c_smbus_read_block_data - SMBus "block read" protocol
David Brownella64ec072007-10-13 23:56:31 +02002230 * @client: Handle to slave device
David Brownella1cdeda2008-07-14 22:38:24 +02002231 * @command: Byte interpreted by slave
David Brownella64ec072007-10-13 23:56:31 +02002232 * @values: Byte array into which data will be read; big enough to hold
2233 * the data returned by the slave. SMBus allows at most 32 bytes.
2234 *
David Brownella1cdeda2008-07-14 22:38:24 +02002235 * This executes the SMBus "block read" protocol, returning negative errno
2236 * else the number of data bytes in the slave's response.
David Brownella64ec072007-10-13 23:56:31 +02002237 *
2238 * Note that using this function requires that the client's adapter support
2239 * the I2C_FUNC_SMBUS_READ_BLOCK_DATA functionality. Not all adapter drivers
2240 * support this; its emulation through I2C messaging relies on a specific
2241 * mechanism (I2C_M_RECV_LEN) which may not be implemented.
2242 */
Jean Delvare0cc43a12011-01-10 22:11:23 +01002243s32 i2c_smbus_read_block_data(const struct i2c_client *client, u8 command,
Jean Delvareb86a1bc2007-05-01 23:26:34 +02002244 u8 *values)
2245{
2246 union i2c_smbus_data data;
David Brownell24a5bb72008-07-14 22:38:23 +02002247 int status;
Jean Delvareb86a1bc2007-05-01 23:26:34 +02002248
David Brownell24a5bb72008-07-14 22:38:23 +02002249 status = i2c_smbus_xfer(client->adapter, client->addr, client->flags,
2250 I2C_SMBUS_READ, command,
2251 I2C_SMBUS_BLOCK_DATA, &data);
2252 if (status)
2253 return status;
Jean Delvareb86a1bc2007-05-01 23:26:34 +02002254
2255 memcpy(values, &data.block[1], data.block[0]);
2256 return data.block[0];
2257}
2258EXPORT_SYMBOL(i2c_smbus_read_block_data);
2259
David Brownella1cdeda2008-07-14 22:38:24 +02002260/**
2261 * i2c_smbus_write_block_data - SMBus "block write" protocol
2262 * @client: Handle to slave device
2263 * @command: Byte interpreted by slave
2264 * @length: Size of data block; SMBus allows at most 32 bytes
2265 * @values: Byte array which will be written.
2266 *
2267 * This executes the SMBus "block write" protocol, returning negative errno
2268 * else zero on success.
2269 */
Jean Delvare0cc43a12011-01-10 22:11:23 +01002270s32 i2c_smbus_write_block_data(const struct i2c_client *client, u8 command,
Krzysztof Halasa46f5ed72006-06-12 21:42:20 +02002271 u8 length, const u8 *values)
Linus Torvalds1da177e2005-04-16 15:20:36 -07002272{
2273 union i2c_smbus_data data;
Jean Delvare76560322006-01-18 23:14:55 +01002274
Linus Torvalds1da177e2005-04-16 15:20:36 -07002275 if (length > I2C_SMBUS_BLOCK_MAX)
2276 length = I2C_SMBUS_BLOCK_MAX;
Linus Torvalds1da177e2005-04-16 15:20:36 -07002277 data.block[0] = length;
Jean Delvare76560322006-01-18 23:14:55 +01002278 memcpy(&data.block[1], values, length);
Farid Hammane7225acf2010-05-21 18:40:58 +02002279 return i2c_smbus_xfer(client->adapter, client->addr, client->flags,
2280 I2C_SMBUS_WRITE, command,
2281 I2C_SMBUS_BLOCK_DATA, &data);
Linus Torvalds1da177e2005-04-16 15:20:36 -07002282}
David Brownellc0564602007-05-01 23:26:31 +02002283EXPORT_SYMBOL(i2c_smbus_write_block_data);
Linus Torvalds1da177e2005-04-16 15:20:36 -07002284
2285/* Returns the number of read bytes */
Jean Delvare0cc43a12011-01-10 22:11:23 +01002286s32 i2c_smbus_read_i2c_block_data(const struct i2c_client *client, u8 command,
Jean Delvare4b2643d2007-07-12 14:12:29 +02002287 u8 length, u8 *values)
Linus Torvalds1da177e2005-04-16 15:20:36 -07002288{
2289 union i2c_smbus_data data;
David Brownell24a5bb72008-07-14 22:38:23 +02002290 int status;
Jean Delvare76560322006-01-18 23:14:55 +01002291
Jean Delvare4b2643d2007-07-12 14:12:29 +02002292 if (length > I2C_SMBUS_BLOCK_MAX)
2293 length = I2C_SMBUS_BLOCK_MAX;
2294 data.block[0] = length;
David Brownell24a5bb72008-07-14 22:38:23 +02002295 status = i2c_smbus_xfer(client->adapter, client->addr, client->flags,
2296 I2C_SMBUS_READ, command,
2297 I2C_SMBUS_I2C_BLOCK_DATA, &data);
2298 if (status < 0)
2299 return status;
Jean Delvare76560322006-01-18 23:14:55 +01002300
2301 memcpy(values, &data.block[1], data.block[0]);
2302 return data.block[0];
Linus Torvalds1da177e2005-04-16 15:20:36 -07002303}
David Brownellc0564602007-05-01 23:26:31 +02002304EXPORT_SYMBOL(i2c_smbus_read_i2c_block_data);
Linus Torvalds1da177e2005-04-16 15:20:36 -07002305
Jean Delvare0cc43a12011-01-10 22:11:23 +01002306s32 i2c_smbus_write_i2c_block_data(const struct i2c_client *client, u8 command,
Krzysztof Halasa46f5ed72006-06-12 21:42:20 +02002307 u8 length, const u8 *values)
Jean Delvare21bbd692006-01-09 15:19:18 +11002308{
2309 union i2c_smbus_data data;
2310
2311 if (length > I2C_SMBUS_BLOCK_MAX)
2312 length = I2C_SMBUS_BLOCK_MAX;
2313 data.block[0] = length;
2314 memcpy(data.block + 1, values, length);
2315 return i2c_smbus_xfer(client->adapter, client->addr, client->flags,
2316 I2C_SMBUS_WRITE, command,
2317 I2C_SMBUS_I2C_BLOCK_DATA, &data);
2318}
David Brownellc0564602007-05-01 23:26:31 +02002319EXPORT_SYMBOL(i2c_smbus_write_i2c_block_data);
Jean Delvare21bbd692006-01-09 15:19:18 +11002320
David Brownell438d6c22006-12-10 21:21:31 +01002321/* Simulate a SMBus command using the i2c protocol
Linus Torvalds1da177e2005-04-16 15:20:36 -07002322 No checking of parameters is done! */
Farid Hammane7225acf2010-05-21 18:40:58 +02002323static s32 i2c_smbus_xfer_emulated(struct i2c_adapter *adapter, u16 addr,
2324 unsigned short flags,
2325 char read_write, u8 command, int size,
2326 union i2c_smbus_data *data)
Linus Torvalds1da177e2005-04-16 15:20:36 -07002327{
2328 /* So we need to generate a series of msgs. In the case of writing, we
2329 need to use only one message; when reading, we need two. We initialize
2330 most things with sane defaults, to keep the code below somewhat
2331 simpler. */
Hideki Iwamoto5c50d182005-09-25 17:01:11 +02002332 unsigned char msgbuf0[I2C_SMBUS_BLOCK_MAX+3];
2333 unsigned char msgbuf1[I2C_SMBUS_BLOCK_MAX+2];
Farid Hammane7225acf2010-05-21 18:40:58 +02002334 int num = read_write == I2C_SMBUS_READ ? 2 : 1;
Linus Torvalds1da177e2005-04-16 15:20:36 -07002335 int i;
Jean Delvare421ef472005-10-26 21:28:55 +02002336 u8 partial_pec = 0;
David Brownell24a5bb72008-07-14 22:38:23 +02002337 int status;
Shubhrajyoti D230da092012-10-05 22:23:52 +02002338 struct i2c_msg msg[2] = {
2339 {
2340 .addr = addr,
2341 .flags = flags,
2342 .len = 1,
2343 .buf = msgbuf0,
2344 }, {
2345 .addr = addr,
2346 .flags = flags | I2C_M_RD,
2347 .len = 0,
2348 .buf = msgbuf1,
2349 },
2350 };
Linus Torvalds1da177e2005-04-16 15:20:36 -07002351
2352 msgbuf0[0] = command;
Farid Hammane7225acf2010-05-21 18:40:58 +02002353 switch (size) {
Linus Torvalds1da177e2005-04-16 15:20:36 -07002354 case I2C_SMBUS_QUICK:
2355 msg[0].len = 0;
2356 /* Special case: The read/write field is used as data */
Roel Kluinf29d2e02009-02-24 19:19:48 +01002357 msg[0].flags = flags | (read_write == I2C_SMBUS_READ ?
2358 I2C_M_RD : 0);
Linus Torvalds1da177e2005-04-16 15:20:36 -07002359 num = 1;
2360 break;
2361 case I2C_SMBUS_BYTE:
2362 if (read_write == I2C_SMBUS_READ) {
2363 /* Special case: only a read! */
2364 msg[0].flags = I2C_M_RD | flags;
2365 num = 1;
2366 }
2367 break;
2368 case I2C_SMBUS_BYTE_DATA:
2369 if (read_write == I2C_SMBUS_READ)
2370 msg[1].len = 1;
2371 else {
2372 msg[0].len = 2;
2373 msgbuf0[1] = data->byte;
2374 }
2375 break;
2376 case I2C_SMBUS_WORD_DATA:
2377 if (read_write == I2C_SMBUS_READ)
2378 msg[1].len = 2;
2379 else {
Farid Hammane7225acf2010-05-21 18:40:58 +02002380 msg[0].len = 3;
Linus Torvalds1da177e2005-04-16 15:20:36 -07002381 msgbuf0[1] = data->word & 0xff;
Jean Delvare7eff82c2006-09-03 22:24:00 +02002382 msgbuf0[2] = data->word >> 8;
Linus Torvalds1da177e2005-04-16 15:20:36 -07002383 }
2384 break;
2385 case I2C_SMBUS_PROC_CALL:
2386 num = 2; /* Special case */
2387 read_write = I2C_SMBUS_READ;
2388 msg[0].len = 3;
2389 msg[1].len = 2;
2390 msgbuf0[1] = data->word & 0xff;
Jean Delvare7eff82c2006-09-03 22:24:00 +02002391 msgbuf0[2] = data->word >> 8;
Linus Torvalds1da177e2005-04-16 15:20:36 -07002392 break;
2393 case I2C_SMBUS_BLOCK_DATA:
Linus Torvalds1da177e2005-04-16 15:20:36 -07002394 if (read_write == I2C_SMBUS_READ) {
Jean Delvare209d27c2007-05-01 23:26:29 +02002395 msg[1].flags |= I2C_M_RECV_LEN;
2396 msg[1].len = 1; /* block length will be added by
2397 the underlying bus driver */
Linus Torvalds1da177e2005-04-16 15:20:36 -07002398 } else {
2399 msg[0].len = data->block[0] + 2;
2400 if (msg[0].len > I2C_SMBUS_BLOCK_MAX + 2) {
David Brownell24a5bb72008-07-14 22:38:23 +02002401 dev_err(&adapter->dev,
2402 "Invalid block write size %d\n",
2403 data->block[0]);
2404 return -EINVAL;
Linus Torvalds1da177e2005-04-16 15:20:36 -07002405 }
Hideki Iwamoto5c50d182005-09-25 17:01:11 +02002406 for (i = 1; i < msg[0].len; i++)
Linus Torvalds1da177e2005-04-16 15:20:36 -07002407 msgbuf0[i] = data->block[i-1];
2408 }
2409 break;
2410 case I2C_SMBUS_BLOCK_PROC_CALL:
Jean Delvare209d27c2007-05-01 23:26:29 +02002411 num = 2; /* Another special case */
2412 read_write = I2C_SMBUS_READ;
2413 if (data->block[0] > I2C_SMBUS_BLOCK_MAX) {
David Brownell24a5bb72008-07-14 22:38:23 +02002414 dev_err(&adapter->dev,
2415 "Invalid block write size %d\n",
Jean Delvare209d27c2007-05-01 23:26:29 +02002416 data->block[0]);
David Brownell24a5bb72008-07-14 22:38:23 +02002417 return -EINVAL;
Jean Delvare209d27c2007-05-01 23:26:29 +02002418 }
2419 msg[0].len = data->block[0] + 2;
2420 for (i = 1; i < msg[0].len; i++)
2421 msgbuf0[i] = data->block[i-1];
2422 msg[1].flags |= I2C_M_RECV_LEN;
2423 msg[1].len = 1; /* block length will be added by
2424 the underlying bus driver */
2425 break;
Linus Torvalds1da177e2005-04-16 15:20:36 -07002426 case I2C_SMBUS_I2C_BLOCK_DATA:
2427 if (read_write == I2C_SMBUS_READ) {
Jean Delvare4b2643d2007-07-12 14:12:29 +02002428 msg[1].len = data->block[0];
Linus Torvalds1da177e2005-04-16 15:20:36 -07002429 } else {
2430 msg[0].len = data->block[0] + 1;
Jean Delvare30dac742005-10-08 00:15:59 +02002431 if (msg[0].len > I2C_SMBUS_BLOCK_MAX + 1) {
David Brownell24a5bb72008-07-14 22:38:23 +02002432 dev_err(&adapter->dev,
2433 "Invalid block write size %d\n",
2434 data->block[0]);
2435 return -EINVAL;
Linus Torvalds1da177e2005-04-16 15:20:36 -07002436 }
2437 for (i = 1; i <= data->block[0]; i++)
2438 msgbuf0[i] = data->block[i];
2439 }
2440 break;
2441 default:
David Brownell24a5bb72008-07-14 22:38:23 +02002442 dev_err(&adapter->dev, "Unsupported transaction %d\n", size);
2443 return -EOPNOTSUPP;
Linus Torvalds1da177e2005-04-16 15:20:36 -07002444 }
2445
Jean Delvare421ef472005-10-26 21:28:55 +02002446 i = ((flags & I2C_CLIENT_PEC) && size != I2C_SMBUS_QUICK
2447 && size != I2C_SMBUS_I2C_BLOCK_DATA);
2448 if (i) {
2449 /* Compute PEC if first message is a write */
2450 if (!(msg[0].flags & I2C_M_RD)) {
David Brownell438d6c22006-12-10 21:21:31 +01002451 if (num == 1) /* Write only */
Jean Delvare421ef472005-10-26 21:28:55 +02002452 i2c_smbus_add_pec(&msg[0]);
2453 else /* Write followed by read */
2454 partial_pec = i2c_smbus_msg_pec(0, &msg[0]);
2455 }
2456 /* Ask for PEC if last message is a read */
2457 if (msg[num-1].flags & I2C_M_RD)
David Brownell438d6c22006-12-10 21:21:31 +01002458 msg[num-1].len++;
Jean Delvare421ef472005-10-26 21:28:55 +02002459 }
2460
David Brownell24a5bb72008-07-14 22:38:23 +02002461 status = i2c_transfer(adapter, msg, num);
2462 if (status < 0)
2463 return status;
Linus Torvalds1da177e2005-04-16 15:20:36 -07002464
Jean Delvare421ef472005-10-26 21:28:55 +02002465 /* Check PEC if last message is a read */
2466 if (i && (msg[num-1].flags & I2C_M_RD)) {
David Brownell24a5bb72008-07-14 22:38:23 +02002467 status = i2c_smbus_check_pec(partial_pec, &msg[num-1]);
2468 if (status < 0)
2469 return status;
Jean Delvare421ef472005-10-26 21:28:55 +02002470 }
2471
Linus Torvalds1da177e2005-04-16 15:20:36 -07002472 if (read_write == I2C_SMBUS_READ)
Farid Hammane7225acf2010-05-21 18:40:58 +02002473 switch (size) {
2474 case I2C_SMBUS_BYTE:
2475 data->byte = msgbuf0[0];
2476 break;
2477 case I2C_SMBUS_BYTE_DATA:
2478 data->byte = msgbuf1[0];
2479 break;
2480 case I2C_SMBUS_WORD_DATA:
2481 case I2C_SMBUS_PROC_CALL:
2482 data->word = msgbuf1[0] | (msgbuf1[1] << 8);
2483 break;
2484 case I2C_SMBUS_I2C_BLOCK_DATA:
2485 for (i = 0; i < data->block[0]; i++)
2486 data->block[i+1] = msgbuf1[i];
2487 break;
2488 case I2C_SMBUS_BLOCK_DATA:
2489 case I2C_SMBUS_BLOCK_PROC_CALL:
2490 for (i = 0; i < msgbuf1[0] + 1; i++)
2491 data->block[i] = msgbuf1[i];
2492 break;
Linus Torvalds1da177e2005-04-16 15:20:36 -07002493 }
2494 return 0;
2495}
2496
David Brownella1cdeda2008-07-14 22:38:24 +02002497/**
2498 * i2c_smbus_xfer - execute SMBus protocol operations
2499 * @adapter: Handle to I2C bus
2500 * @addr: Address of SMBus slave on that bus
2501 * @flags: I2C_CLIENT_* flags (usually zero or I2C_CLIENT_PEC)
2502 * @read_write: I2C_SMBUS_READ or I2C_SMBUS_WRITE
2503 * @command: Byte interpreted by slave, for protocols which use such bytes
2504 * @protocol: SMBus protocol operation to execute, such as I2C_SMBUS_PROC_CALL
2505 * @data: Data to be read or written
2506 *
2507 * This executes an SMBus protocol operation, and returns a negative
2508 * errno code else zero on success.
2509 */
Zhenwen Xu09b8ce02009-03-28 21:34:46 +01002510s32 i2c_smbus_xfer(struct i2c_adapter *adapter, u16 addr, unsigned short flags,
David Brownella1cdeda2008-07-14 22:38:24 +02002511 char read_write, u8 command, int protocol,
Zhenwen Xu09b8ce02009-03-28 21:34:46 +01002512 union i2c_smbus_data *data)
Linus Torvalds1da177e2005-04-16 15:20:36 -07002513{
Clifford Wolf66b650f2009-06-15 18:01:46 +02002514 unsigned long orig_jiffies;
2515 int try;
Linus Torvalds1da177e2005-04-16 15:20:36 -07002516 s32 res;
Linus Torvalds1da177e2005-04-16 15:20:36 -07002517
Laurent Pinchartd47726c2012-07-24 14:13:59 +02002518 flags &= I2C_M_TEN | I2C_CLIENT_PEC | I2C_CLIENT_SCCB;
Linus Torvalds1da177e2005-04-16 15:20:36 -07002519
2520 if (adapter->algo->smbus_xfer) {
Jean Delvarefe61e072010-08-11 18:20:58 +02002521 i2c_lock_adapter(adapter);
Clifford Wolf66b650f2009-06-15 18:01:46 +02002522
2523 /* Retry automatically on arbitration loss */
2524 orig_jiffies = jiffies;
2525 for (res = 0, try = 0; try <= adapter->retries; try++) {
2526 res = adapter->algo->smbus_xfer(adapter, addr, flags,
2527 read_write, command,
2528 protocol, data);
2529 if (res != -EAGAIN)
2530 break;
2531 if (time_after(jiffies,
2532 orig_jiffies + adapter->timeout))
2533 break;
2534 }
Jean Delvarefe61e072010-08-11 18:20:58 +02002535 i2c_unlock_adapter(adapter);
Linus Torvalds1da177e2005-04-16 15:20:36 -07002536
Laurent Pinchart72fc2c72012-07-24 14:13:59 +02002537 if (res != -EOPNOTSUPP || !adapter->algo->master_xfer)
2538 return res;
2539 /*
2540 * Fall back to i2c_smbus_xfer_emulated if the adapter doesn't
2541 * implement native support for the SMBus operation.
2542 */
2543 }
2544
2545 return i2c_smbus_xfer_emulated(adapter, addr, flags, read_write,
2546 command, protocol, data);
Linus Torvalds1da177e2005-04-16 15:20:36 -07002547}
Linus Torvalds1da177e2005-04-16 15:20:36 -07002548EXPORT_SYMBOL(i2c_smbus_xfer);
Linus Torvalds1da177e2005-04-16 15:20:36 -07002549
2550MODULE_AUTHOR("Simon G. Vogl <simon@tk.uni-linz.ac.at>");
2551MODULE_DESCRIPTION("I2C-Bus main module");
2552MODULE_LICENSE("GPL");