blob: 1e52395e90a7417da1aceb97727ee6d6216b719d [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
Wolfram Sangca1f8da2014-11-04 23:46:27 +010013 GNU General Public License for more details. */
Linus Torvalds1da177e2005-04-16 15:20:36 -070014/* ------------------------------------------------------------------------- */
15
Jan Engelhardt96de0e22007-10-19 23:21:04 +020016/* With some changes from Kyösti Mälkki <kmalkki@cc.hut.fi>.
Linus Torvalds1da177e2005-04-16 15:20:36 -070017 All SMBus-related things are written by Frodo Looijaard <frodol@dds.nl>
Jean Delvare421ef472005-10-26 21:28:55 +020018 SMBus 2.0 support by Mark Studebaker <mdsxyz123@yahoo.com> and
Jean Delvare7c81c602014-01-29 20:40:08 +010019 Jean Delvare <jdelvare@suse.de>
Michael Lawnick08263742010-08-11 18:21:02 +020020 Mux support by Rodolfo Giometti <giometti@enneenne.com> and
Wolfram Sang687b81d2013-07-11 12:56:15 +010021 Michael Lawnick <michael.lawnick.ext@nsn.com>
22 OF support is copyright (c) 2008 Jochen Friedrich <jochen@scram.de>
23 (based on a previous patch from Jon Smirl <jonsmirl@gmail.com>) and
24 (c) 2013 Wolfram Sang <wsa@the-dreams.de>
Wolfram Sang17f4a5c2014-09-22 19:41:00 +020025 I2C ACPI code Copyright (C) 2014 Intel Corp
26 Author: Lan Tianyu <tianyu.lan@intel.com>
Wolfram Sang4b1acc42014-11-18 17:04:53 +010027 I2C slave support (c) 2014 by Wolfram Sang <wsa@sang-engineering.com>
Wolfram Sang687b81d2013-07-11 12:56:15 +010028 */
Linus Torvalds1da177e2005-04-16 15:20:36 -070029
Wolfram Sang44239a52016-07-09 13:35:04 +090030#define pr_fmt(fmt) "i2c-core: " fmt
31
Wolfram Sangb4e2f6a2015-05-19 21:04:40 +020032#include <dt-bindings/i2c/i2c.h>
Linus Torvalds7c0f6ba2016-12-24 11:46:01 -080033#include <linux/uaccess.h>
Wolfram Sang53feedf2016-02-20 23:33:38 +010034#include <linux/acpi.h>
Sylwester Nawrocki86be4082014-06-18 17:29:32 +020035#include <linux/clk/clk-conf.h>
Jean Delvareb8d6f452007-02-13 22:09:00 +010036#include <linux/completion.h>
Wolfram Sang53feedf2016-02-20 23:33:38 +010037#include <linux/delay.h>
Pantelis Antonioua430a3452014-10-28 22:36:02 +020038#include <linux/err.h>
Wolfram Sang53feedf2016-02-20 23:33:38 +010039#include <linux/errno.h>
40#include <linux/gpio.h>
41#include <linux/hardirq.h>
42#include <linux/i2c.h>
43#include <linux/idr.h>
44#include <linux/init.h>
45#include <linux/irqflags.h>
46#include <linux/jump_label.h>
47#include <linux/kernel.h>
48#include <linux/module.h>
49#include <linux/mutex.h>
50#include <linux/of_device.h>
51#include <linux/of.h>
52#include <linux/of_irq.h>
53#include <linux/pm_domain.h>
54#include <linux/pm_runtime.h>
55#include <linux/pm_wakeirq.h>
Wolfram Sange1dba012015-12-08 10:37:46 +010056#include <linux/property.h>
Wolfram Sang53feedf2016-02-20 23:33:38 +010057#include <linux/rwsem.h>
58#include <linux/slab.h>
Linus Torvalds1da177e2005-04-16 15:20:36 -070059
David Brownell9c1600e2007-05-01 23:26:31 +020060#include "i2c-core.h"
61
David Howellsd9a83d62014-03-06 13:35:59 +000062#define CREATE_TRACE_POINTS
63#include <trace/events/i2c.h>
Linus Torvalds1da177e2005-04-16 15:20:36 -070064
Wolfram Sangda899f52015-05-18 21:09:12 +020065#define I2C_ADDR_OFFSET_TEN_BIT 0xa000
66#define I2C_ADDR_OFFSET_SLAVE 0x1000
67
Benjamin Tissoires4d5538f2016-10-13 14:10:40 +020068#define I2C_ADDR_7BITS_MAX 0x77
69#define I2C_ADDR_7BITS_COUNT (I2C_ADDR_7BITS_MAX + 1)
70
Jean Delvare6629dcf2010-05-04 11:09:28 +020071/* core_lock protects i2c_adapter_idr, and guarantees
Jean Delvare35fc37f2009-06-19 16:58:19 +020072 that device detection, deletion of detected devices, and attach_adapter
Lars-Peter Clausen19baba42013-03-09 08:16:44 +000073 calls are serialized */
Jean Delvarecaada322008-01-27 18:14:49 +010074static DEFINE_MUTEX(core_lock);
Linus Torvalds1da177e2005-04-16 15:20:36 -070075static DEFINE_IDR(i2c_adapter_idr);
76
Jean Delvare4f8cf822009-09-18 22:45:46 +020077static struct device_type i2c_client_type;
Jean Delvare4735c982008-07-14 22:38:36 +020078static int i2c_detect(struct i2c_adapter *adapter, struct i2c_driver *driver);
David Brownellf37dd802007-02-13 22:09:00 +010079
David Howellsd9a83d62014-03-06 13:35:59 +000080static struct static_key i2c_trace_msg = STATIC_KEY_INIT_FALSE;
Sudip Mukherjee95026652016-03-07 17:19:17 +053081static bool is_registered;
David Howellsd9a83d62014-03-06 13:35:59 +000082
Steven Rostedt (Red Hat)8cf868a2016-11-28 13:03:21 -050083int i2c_transfer_trace_reg(void)
David Howellsd9a83d62014-03-06 13:35:59 +000084{
85 static_key_slow_inc(&i2c_trace_msg);
Steven Rostedt (Red Hat)8cf868a2016-11-28 13:03:21 -050086 return 0;
David Howellsd9a83d62014-03-06 13:35:59 +000087}
88
89void i2c_transfer_trace_unreg(void)
90{
91 static_key_slow_dec(&i2c_trace_msg);
92}
93
Wolfram Sang17f4a5c2014-09-22 19:41:00 +020094#if defined(CONFIG_ACPI)
Jarkko Nikulaaec809f2016-08-12 17:02:52 +030095struct i2c_acpi_handler_data {
Wolfram Sang17f4a5c2014-09-22 19:41:00 +020096 struct acpi_connection_info info;
97 struct i2c_adapter *adapter;
98};
99
100struct gsb_buffer {
101 u8 status;
102 u8 len;
103 union {
104 u16 wdata;
105 u8 bdata;
106 u8 data[0];
107 };
108} __packed;
109
Jarkko Nikulaaec809f2016-08-12 17:02:52 +0300110struct i2c_acpi_lookup {
Mika Westerberg166c2ba2015-10-07 13:18:44 +0300111 struct i2c_board_info *info;
112 acpi_handle adapter_handle;
113 acpi_handle device_handle;
Jarkko Nikula5853b222016-08-12 17:02:53 +0300114 acpi_handle search_handle;
115 u32 speed;
116 u32 min_speed;
Mika Westerberg166c2ba2015-10-07 13:18:44 +0300117};
118
Jarkko Nikulaaec809f2016-08-12 17:02:52 +0300119static int i2c_acpi_fill_info(struct acpi_resource *ares, void *data)
Wolfram Sang17f4a5c2014-09-22 19:41:00 +0200120{
Jarkko Nikulaaec809f2016-08-12 17:02:52 +0300121 struct i2c_acpi_lookup *lookup = data;
Mika Westerberg166c2ba2015-10-07 13:18:44 +0300122 struct i2c_board_info *info = lookup->info;
123 struct acpi_resource_i2c_serialbus *sb;
Mika Westerberg166c2ba2015-10-07 13:18:44 +0300124 acpi_status status;
Wolfram Sang17f4a5c2014-09-22 19:41:00 +0200125
Mika Westerberg166c2ba2015-10-07 13:18:44 +0300126 if (info->addr || ares->type != ACPI_RESOURCE_TYPE_SERIAL_BUS)
127 return 1;
Wolfram Sang17f4a5c2014-09-22 19:41:00 +0200128
Mika Westerberg166c2ba2015-10-07 13:18:44 +0300129 sb = &ares->data.i2c_serial_bus;
130 if (sb->type != ACPI_RESOURCE_SERIAL_TYPE_I2C)
131 return 1;
Wolfram Sang17f4a5c2014-09-22 19:41:00 +0200132
Mika Westerberg166c2ba2015-10-07 13:18:44 +0300133 status = acpi_get_handle(lookup->device_handle,
134 sb->resource_source.string_ptr,
Octavian Purdila525e6fa2016-07-08 19:13:10 +0300135 &lookup->adapter_handle);
136 if (!ACPI_SUCCESS(status))
137 return 1;
138
139 info->addr = sb->slave_address;
Jarkko Nikula5853b222016-08-12 17:02:53 +0300140 lookup->speed = sb->connection_speed;
Octavian Purdila525e6fa2016-07-08 19:13:10 +0300141 if (sb->access_mode == ACPI_I2C_10BIT_MODE)
142 info->flags |= I2C_CLIENT_TEN;
Wolfram Sang17f4a5c2014-09-22 19:41:00 +0200143
Wolfram Sang17f4a5c2014-09-22 19:41:00 +0200144 return 1;
145}
146
Jarkko Nikula5853b222016-08-12 17:02:53 +0300147static int i2c_acpi_do_lookup(struct acpi_device *adev,
148 struct i2c_acpi_lookup *lookup)
149{
150 struct i2c_board_info *info = lookup->info;
151 struct list_head resource_list;
152 int ret;
153
154 if (acpi_bus_get_status(adev) || !adev->status.present ||
155 acpi_device_enumerated(adev))
156 return -EINVAL;
157
158 memset(info, 0, sizeof(*info));
159 lookup->device_handle = acpi_device_handle(adev);
160
161 /* Look up for I2cSerialBus resource */
162 INIT_LIST_HEAD(&resource_list);
163 ret = acpi_dev_get_resources(adev, &resource_list,
164 i2c_acpi_fill_info, lookup);
165 acpi_dev_free_resource_list(&resource_list);
166
167 if (ret < 0 || !info->addr)
168 return -EINVAL;
169
170 return 0;
171}
172
Jarkko Nikulaaec809f2016-08-12 17:02:52 +0300173static int i2c_acpi_get_info(struct acpi_device *adev,
Octavian Purdila525e6fa2016-07-08 19:13:10 +0300174 struct i2c_board_info *info,
Mika Westerberg318ce272016-09-20 16:59:25 +0300175 struct i2c_adapter *adapter,
Octavian Purdila525e6fa2016-07-08 19:13:10 +0300176 acpi_handle *adapter_handle)
Wolfram Sang17f4a5c2014-09-22 19:41:00 +0200177{
Wolfram Sang17f4a5c2014-09-22 19:41:00 +0200178 struct list_head resource_list;
Mika Westerberg166c2ba2015-10-07 13:18:44 +0300179 struct resource_entry *entry;
Jarkko Nikulaaec809f2016-08-12 17:02:52 +0300180 struct i2c_acpi_lookup lookup;
Wolfram Sang17f4a5c2014-09-22 19:41:00 +0200181 int ret;
182
Mika Westerberg166c2ba2015-10-07 13:18:44 +0300183 memset(&lookup, 0, sizeof(lookup));
Octavian Purdila525e6fa2016-07-08 19:13:10 +0300184 lookup.info = info;
Mika Westerberg166c2ba2015-10-07 13:18:44 +0300185
Jarkko Nikula5853b222016-08-12 17:02:53 +0300186 ret = i2c_acpi_do_lookup(adev, &lookup);
187 if (ret)
188 return ret;
Wolfram Sang17f4a5c2014-09-22 19:41:00 +0200189
Mika Westerberg318ce272016-09-20 16:59:25 +0300190 if (adapter) {
191 /* The adapter must match the one in I2cSerialBus() connector */
192 if (ACPI_HANDLE(&adapter->dev) != lookup.adapter_handle)
193 return -ENODEV;
194 } else {
195 struct acpi_device *adapter_adev;
196
197 /* The adapter must be present */
198 if (acpi_bus_get_device(lookup.adapter_handle, &adapter_adev))
199 return -ENODEV;
200 if (acpi_bus_get_status(adapter_adev) ||
201 !adapter_adev->status.present)
202 return -ENODEV;
203 }
204
Jarkko Nikula5853b222016-08-12 17:02:53 +0300205 info->fwnode = acpi_fwnode_handle(adev);
Mika Westerberg318ce272016-09-20 16:59:25 +0300206 if (adapter_handle)
207 *adapter_handle = lookup.adapter_handle;
Wolfram Sang17f4a5c2014-09-22 19:41:00 +0200208
Mika Westerberg166c2ba2015-10-07 13:18:44 +0300209 /* Then fill IRQ number if any */
Jarkko Nikula5853b222016-08-12 17:02:53 +0300210 INIT_LIST_HEAD(&resource_list);
Mika Westerberg166c2ba2015-10-07 13:18:44 +0300211 ret = acpi_dev_get_resources(adev, &resource_list, NULL, NULL);
212 if (ret < 0)
Octavian Purdila525e6fa2016-07-08 19:13:10 +0300213 return -EINVAL;
Mika Westerberg166c2ba2015-10-07 13:18:44 +0300214
215 resource_list_for_each_entry(entry, &resource_list) {
216 if (resource_type(entry->res) == IORESOURCE_IRQ) {
Octavian Purdila525e6fa2016-07-08 19:13:10 +0300217 info->irq = entry->res->start;
Mika Westerberg166c2ba2015-10-07 13:18:44 +0300218 break;
219 }
220 }
221
222 acpi_dev_free_resource_list(&resource_list);
223
Dan O'Donovan622b3072017-02-05 16:30:13 +0000224 acpi_set_modalias(adev, dev_name(&adev->dev), info->type,
225 sizeof(info->type));
Octavian Purdila525e6fa2016-07-08 19:13:10 +0300226
227 return 0;
228}
229
Jarkko Nikulaaec809f2016-08-12 17:02:52 +0300230static void i2c_acpi_register_device(struct i2c_adapter *adapter,
Octavian Purdila525e6fa2016-07-08 19:13:10 +0300231 struct acpi_device *adev,
232 struct i2c_board_info *info)
233{
Wolfram Sang17f4a5c2014-09-22 19:41:00 +0200234 adev->power.flags.ignore_parent = true;
Octavian Purdila525e6fa2016-07-08 19:13:10 +0300235 acpi_device_set_enumerated(adev);
236
237 if (!i2c_new_device(adapter, info)) {
Wolfram Sang17f4a5c2014-09-22 19:41:00 +0200238 adev->power.flags.ignore_parent = false;
239 dev_err(&adapter->dev,
240 "failed to add I2C device %s from ACPI\n",
241 dev_name(&adev->dev));
242 }
Octavian Purdila525e6fa2016-07-08 19:13:10 +0300243}
244
Jarkko Nikulaaec809f2016-08-12 17:02:52 +0300245static acpi_status i2c_acpi_add_device(acpi_handle handle, u32 level,
Octavian Purdila525e6fa2016-07-08 19:13:10 +0300246 void *data, void **return_value)
247{
248 struct i2c_adapter *adapter = data;
249 struct acpi_device *adev;
Octavian Purdila525e6fa2016-07-08 19:13:10 +0300250 struct i2c_board_info info;
251
252 if (acpi_bus_get_device(handle, &adev))
253 return AE_OK;
254
Mika Westerberg318ce272016-09-20 16:59:25 +0300255 if (i2c_acpi_get_info(adev, &info, adapter, NULL))
Octavian Purdila525e6fa2016-07-08 19:13:10 +0300256 return AE_OK;
257
Jarkko Nikulaaec809f2016-08-12 17:02:52 +0300258 i2c_acpi_register_device(adapter, adev, &info);
Wolfram Sang17f4a5c2014-09-22 19:41:00 +0200259
260 return AE_OK;
261}
262
Jarkko Nikulaaec809f2016-08-12 17:02:52 +0300263#define I2C_ACPI_MAX_SCAN_DEPTH 32
Mika Westerberg166c2ba2015-10-07 13:18:44 +0300264
Wolfram Sang17f4a5c2014-09-22 19:41:00 +0200265/**
Jarkko Nikulaaec809f2016-08-12 17:02:52 +0300266 * i2c_acpi_register_devices - enumerate I2C slave devices behind adapter
Wolfram Sang17f4a5c2014-09-22 19:41:00 +0200267 * @adap: pointer to adapter
268 *
269 * Enumerate all I2C slave devices behind this adapter by walking the ACPI
270 * namespace. When a device is found it will be added to the Linux device
271 * model and bound to the corresponding ACPI handle.
272 */
Jarkko Nikulaaec809f2016-08-12 17:02:52 +0300273static void i2c_acpi_register_devices(struct i2c_adapter *adap)
Wolfram Sang17f4a5c2014-09-22 19:41:00 +0200274{
Wolfram Sang17f4a5c2014-09-22 19:41:00 +0200275 acpi_status status;
276
Dustin Byford8eb5c872015-10-23 12:27:07 -0700277 if (!has_acpi_companion(&adap->dev))
Wolfram Sang17f4a5c2014-09-22 19:41:00 +0200278 return;
279
Mika Westerberg166c2ba2015-10-07 13:18:44 +0300280 status = acpi_walk_namespace(ACPI_TYPE_DEVICE, ACPI_ROOT_OBJECT,
Jarkko Nikulaaec809f2016-08-12 17:02:52 +0300281 I2C_ACPI_MAX_SCAN_DEPTH,
282 i2c_acpi_add_device, NULL,
Wolfram Sang17f4a5c2014-09-22 19:41:00 +0200283 adap, NULL);
284 if (ACPI_FAILURE(status))
285 dev_warn(&adap->dev, "failed to enumerate I2C slaves\n");
286}
287
Jarkko Nikula5853b222016-08-12 17:02:53 +0300288static acpi_status i2c_acpi_lookup_speed(acpi_handle handle, u32 level,
289 void *data, void **return_value)
290{
291 struct i2c_acpi_lookup *lookup = data;
292 struct acpi_device *adev;
293
294 if (acpi_bus_get_device(handle, &adev))
295 return AE_OK;
296
297 if (i2c_acpi_do_lookup(adev, lookup))
298 return AE_OK;
299
300 if (lookup->search_handle != lookup->adapter_handle)
301 return AE_OK;
302
303 if (lookup->speed <= lookup->min_speed)
304 lookup->min_speed = lookup->speed;
305
306 return AE_OK;
307}
308
309/**
310 * i2c_acpi_find_bus_speed - find I2C bus speed from ACPI
311 * @dev: The device owning the bus
312 *
313 * Find the I2C bus speed by walking the ACPI namespace for all I2C slaves
314 * devices connected to this bus and use the speed of slowest device.
315 *
316 * Returns the speed in Hz or zero
317 */
318u32 i2c_acpi_find_bus_speed(struct device *dev)
319{
320 struct i2c_acpi_lookup lookup;
321 struct i2c_board_info dummy;
322 acpi_status status;
323
324 if (!has_acpi_companion(dev))
325 return 0;
326
327 memset(&lookup, 0, sizeof(lookup));
328 lookup.search_handle = ACPI_HANDLE(dev);
329 lookup.min_speed = UINT_MAX;
330 lookup.info = &dummy;
331
332 status = acpi_walk_namespace(ACPI_TYPE_DEVICE, ACPI_ROOT_OBJECT,
333 I2C_ACPI_MAX_SCAN_DEPTH,
334 i2c_acpi_lookup_speed, NULL,
335 &lookup, NULL);
336
337 if (ACPI_FAILURE(status)) {
338 dev_warn(dev, "unable to find I2C bus speed from ACPI\n");
339 return 0;
340 }
341
342 return lookup.min_speed != UINT_MAX ? lookup.min_speed : 0;
343}
344EXPORT_SYMBOL_GPL(i2c_acpi_find_bus_speed);
345
Jarkko Nikulaaec809f2016-08-12 17:02:52 +0300346static int i2c_acpi_match_adapter(struct device *dev, void *data)
Octavian Purdila525e6fa2016-07-08 19:13:10 +0300347{
348 struct i2c_adapter *adapter = i2c_verify_adapter(dev);
349
350 if (!adapter)
351 return 0;
352
353 return ACPI_HANDLE(dev) == (acpi_handle)data;
354}
355
Jarkko Nikulaaec809f2016-08-12 17:02:52 +0300356static int i2c_acpi_match_device(struct device *dev, void *data)
Octavian Purdila525e6fa2016-07-08 19:13:10 +0300357{
358 return ACPI_COMPANION(dev) == data;
359}
360
Jarkko Nikulaaec809f2016-08-12 17:02:52 +0300361static struct i2c_adapter *i2c_acpi_find_adapter_by_handle(acpi_handle handle)
Octavian Purdila525e6fa2016-07-08 19:13:10 +0300362{
363 struct device *dev;
364
365 dev = bus_find_device(&i2c_bus_type, NULL, handle,
Jarkko Nikulaaec809f2016-08-12 17:02:52 +0300366 i2c_acpi_match_adapter);
Octavian Purdila525e6fa2016-07-08 19:13:10 +0300367 return dev ? i2c_verify_adapter(dev) : NULL;
368}
369
Jarkko Nikulaaec809f2016-08-12 17:02:52 +0300370static struct i2c_client *i2c_acpi_find_client_by_adev(struct acpi_device *adev)
Octavian Purdila525e6fa2016-07-08 19:13:10 +0300371{
372 struct device *dev;
373
Jarkko Nikulaaec809f2016-08-12 17:02:52 +0300374 dev = bus_find_device(&i2c_bus_type, NULL, adev, i2c_acpi_match_device);
Octavian Purdila525e6fa2016-07-08 19:13:10 +0300375 return dev ? i2c_verify_client(dev) : NULL;
376}
377
Jarkko Nikulaaec809f2016-08-12 17:02:52 +0300378static int i2c_acpi_notify(struct notifier_block *nb, unsigned long value,
Octavian Purdila525e6fa2016-07-08 19:13:10 +0300379 void *arg)
380{
381 struct acpi_device *adev = arg;
382 struct i2c_board_info info;
383 acpi_handle adapter_handle;
384 struct i2c_adapter *adapter;
385 struct i2c_client *client;
386
387 switch (value) {
388 case ACPI_RECONFIG_DEVICE_ADD:
Mika Westerberg318ce272016-09-20 16:59:25 +0300389 if (i2c_acpi_get_info(adev, &info, NULL, &adapter_handle))
Octavian Purdila525e6fa2016-07-08 19:13:10 +0300390 break;
391
Jarkko Nikulaaec809f2016-08-12 17:02:52 +0300392 adapter = i2c_acpi_find_adapter_by_handle(adapter_handle);
Octavian Purdila525e6fa2016-07-08 19:13:10 +0300393 if (!adapter)
394 break;
395
Jarkko Nikulaaec809f2016-08-12 17:02:52 +0300396 i2c_acpi_register_device(adapter, adev, &info);
Octavian Purdila525e6fa2016-07-08 19:13:10 +0300397 break;
398 case ACPI_RECONFIG_DEVICE_REMOVE:
399 if (!acpi_device_enumerated(adev))
400 break;
401
Jarkko Nikulaaec809f2016-08-12 17:02:52 +0300402 client = i2c_acpi_find_client_by_adev(adev);
Octavian Purdila525e6fa2016-07-08 19:13:10 +0300403 if (!client)
404 break;
405
406 i2c_unregister_device(client);
407 put_device(&client->dev);
408 break;
409 }
410
411 return NOTIFY_OK;
412}
413
414static struct notifier_block i2c_acpi_notifier = {
Jarkko Nikulaaec809f2016-08-12 17:02:52 +0300415 .notifier_call = i2c_acpi_notify,
Octavian Purdila525e6fa2016-07-08 19:13:10 +0300416};
Wolfram Sang17f4a5c2014-09-22 19:41:00 +0200417#else /* CONFIG_ACPI */
Jarkko Nikulaaec809f2016-08-12 17:02:52 +0300418static inline void i2c_acpi_register_devices(struct i2c_adapter *adap) { }
Octavian Purdila525e6fa2016-07-08 19:13:10 +0300419extern struct notifier_block i2c_acpi_notifier;
Wolfram Sang17f4a5c2014-09-22 19:41:00 +0200420#endif /* CONFIG_ACPI */
421
422#ifdef CONFIG_ACPI_I2C_OPREGION
423static int acpi_gsb_i2c_read_bytes(struct i2c_client *client,
424 u8 cmd, u8 *data, u8 data_len)
425{
426
427 struct i2c_msg msgs[2];
428 int ret;
429 u8 *buffer;
430
431 buffer = kzalloc(data_len, GFP_KERNEL);
432 if (!buffer)
433 return AE_NO_MEMORY;
434
435 msgs[0].addr = client->addr;
436 msgs[0].flags = client->flags;
437 msgs[0].len = 1;
438 msgs[0].buf = &cmd;
439
440 msgs[1].addr = client->addr;
441 msgs[1].flags = client->flags | I2C_M_RD;
442 msgs[1].len = data_len;
443 msgs[1].buf = buffer;
444
445 ret = i2c_transfer(client->adapter, msgs, ARRAY_SIZE(msgs));
446 if (ret < 0)
447 dev_err(&client->adapter->dev, "i2c read failed\n");
448 else
449 memcpy(data, buffer, data_len);
450
451 kfree(buffer);
452 return ret;
453}
454
455static int acpi_gsb_i2c_write_bytes(struct i2c_client *client,
456 u8 cmd, u8 *data, u8 data_len)
457{
458
459 struct i2c_msg msgs[1];
460 u8 *buffer;
461 int ret = AE_OK;
462
463 buffer = kzalloc(data_len + 1, GFP_KERNEL);
464 if (!buffer)
465 return AE_NO_MEMORY;
466
467 buffer[0] = cmd;
468 memcpy(buffer + 1, data, data_len);
469
470 msgs[0].addr = client->addr;
471 msgs[0].flags = client->flags;
472 msgs[0].len = data_len + 1;
473 msgs[0].buf = buffer;
474
475 ret = i2c_transfer(client->adapter, msgs, ARRAY_SIZE(msgs));
476 if (ret < 0)
477 dev_err(&client->adapter->dev, "i2c write failed\n");
478
479 kfree(buffer);
480 return ret;
481}
482
483static acpi_status
Jarkko Nikulaaec809f2016-08-12 17:02:52 +0300484i2c_acpi_space_handler(u32 function, acpi_physical_address command,
Wolfram Sang17f4a5c2014-09-22 19:41:00 +0200485 u32 bits, u64 *value64,
486 void *handler_context, void *region_context)
487{
488 struct gsb_buffer *gsb = (struct gsb_buffer *)value64;
Jarkko Nikulaaec809f2016-08-12 17:02:52 +0300489 struct i2c_acpi_handler_data *data = handler_context;
Wolfram Sang17f4a5c2014-09-22 19:41:00 +0200490 struct acpi_connection_info *info = &data->info;
491 struct acpi_resource_i2c_serialbus *sb;
492 struct i2c_adapter *adapter = data->adapter;
Jarkko Nikula7ef85f52015-05-20 16:36:52 +0300493 struct i2c_client *client;
Wolfram Sang17f4a5c2014-09-22 19:41:00 +0200494 struct acpi_resource *ares;
495 u32 accessor_type = function >> 16;
496 u8 action = function & ACPI_IO_MASK;
Wolfram Sang4470c722014-11-18 15:12:43 +0100497 acpi_status ret;
Wolfram Sang17f4a5c2014-09-22 19:41:00 +0200498 int status;
499
500 ret = acpi_buffer_to_resource(info->connection, info->length, &ares);
501 if (ACPI_FAILURE(ret))
502 return ret;
503
Jarkko Nikula7ef85f52015-05-20 16:36:52 +0300504 client = kzalloc(sizeof(*client), GFP_KERNEL);
505 if (!client) {
506 ret = AE_NO_MEMORY;
507 goto err;
508 }
509
Wolfram Sang17f4a5c2014-09-22 19:41:00 +0200510 if (!value64 || ares->type != ACPI_RESOURCE_TYPE_SERIAL_BUS) {
511 ret = AE_BAD_PARAMETER;
512 goto err;
513 }
514
515 sb = &ares->data.i2c_serial_bus;
516 if (sb->type != ACPI_RESOURCE_SERIAL_TYPE_I2C) {
517 ret = AE_BAD_PARAMETER;
518 goto err;
519 }
520
Jarkko Nikula7ef85f52015-05-20 16:36:52 +0300521 client->adapter = adapter;
522 client->addr = sb->slave_address;
Wolfram Sang17f4a5c2014-09-22 19:41:00 +0200523
524 if (sb->access_mode == ACPI_I2C_10BIT_MODE)
Jarkko Nikula7ef85f52015-05-20 16:36:52 +0300525 client->flags |= I2C_CLIENT_TEN;
Wolfram Sang17f4a5c2014-09-22 19:41:00 +0200526
527 switch (accessor_type) {
528 case ACPI_GSB_ACCESS_ATTRIB_SEND_RCV:
529 if (action == ACPI_READ) {
Jarkko Nikula7ef85f52015-05-20 16:36:52 +0300530 status = i2c_smbus_read_byte(client);
Wolfram Sang17f4a5c2014-09-22 19:41:00 +0200531 if (status >= 0) {
532 gsb->bdata = status;
533 status = 0;
534 }
535 } else {
Jarkko Nikula7ef85f52015-05-20 16:36:52 +0300536 status = i2c_smbus_write_byte(client, gsb->bdata);
Wolfram Sang17f4a5c2014-09-22 19:41:00 +0200537 }
538 break;
539
540 case ACPI_GSB_ACCESS_ATTRIB_BYTE:
541 if (action == ACPI_READ) {
Jarkko Nikula7ef85f52015-05-20 16:36:52 +0300542 status = i2c_smbus_read_byte_data(client, command);
Wolfram Sang17f4a5c2014-09-22 19:41:00 +0200543 if (status >= 0) {
544 gsb->bdata = status;
545 status = 0;
546 }
547 } else {
Jarkko Nikula7ef85f52015-05-20 16:36:52 +0300548 status = i2c_smbus_write_byte_data(client, command,
Wolfram Sang17f4a5c2014-09-22 19:41:00 +0200549 gsb->bdata);
550 }
551 break;
552
553 case ACPI_GSB_ACCESS_ATTRIB_WORD:
554 if (action == ACPI_READ) {
Jarkko Nikula7ef85f52015-05-20 16:36:52 +0300555 status = i2c_smbus_read_word_data(client, command);
Wolfram Sang17f4a5c2014-09-22 19:41:00 +0200556 if (status >= 0) {
557 gsb->wdata = status;
558 status = 0;
559 }
560 } else {
Jarkko Nikula7ef85f52015-05-20 16:36:52 +0300561 status = i2c_smbus_write_word_data(client, command,
Wolfram Sang17f4a5c2014-09-22 19:41:00 +0200562 gsb->wdata);
563 }
564 break;
565
566 case ACPI_GSB_ACCESS_ATTRIB_BLOCK:
567 if (action == ACPI_READ) {
Jarkko Nikula7ef85f52015-05-20 16:36:52 +0300568 status = i2c_smbus_read_block_data(client, command,
Wolfram Sang17f4a5c2014-09-22 19:41:00 +0200569 gsb->data);
570 if (status >= 0) {
571 gsb->len = status;
572 status = 0;
573 }
574 } else {
Jarkko Nikula7ef85f52015-05-20 16:36:52 +0300575 status = i2c_smbus_write_block_data(client, command,
Wolfram Sang17f4a5c2014-09-22 19:41:00 +0200576 gsb->len, gsb->data);
577 }
578 break;
579
580 case ACPI_GSB_ACCESS_ATTRIB_MULTIBYTE:
581 if (action == ACPI_READ) {
Jarkko Nikula7ef85f52015-05-20 16:36:52 +0300582 status = acpi_gsb_i2c_read_bytes(client, command,
Wolfram Sang17f4a5c2014-09-22 19:41:00 +0200583 gsb->data, info->access_length);
584 if (status > 0)
585 status = 0;
586 } else {
Jarkko Nikula7ef85f52015-05-20 16:36:52 +0300587 status = acpi_gsb_i2c_write_bytes(client, command,
Wolfram Sang17f4a5c2014-09-22 19:41:00 +0200588 gsb->data, info->access_length);
589 }
590 break;
591
592 default:
Wolfram Sangbe309c32016-07-09 13:35:03 +0900593 dev_warn(&adapter->dev, "protocol 0x%02x not supported for client 0x%02x\n",
594 accessor_type, client->addr);
Wolfram Sang17f4a5c2014-09-22 19:41:00 +0200595 ret = AE_BAD_PARAMETER;
596 goto err;
597 }
598
599 gsb->status = status;
600
601 err:
Jarkko Nikula7ef85f52015-05-20 16:36:52 +0300602 kfree(client);
Wolfram Sang17f4a5c2014-09-22 19:41:00 +0200603 ACPI_FREE(ares);
604 return ret;
605}
606
607
Jarkko Nikulaaec809f2016-08-12 17:02:52 +0300608static int i2c_acpi_install_space_handler(struct i2c_adapter *adapter)
Wolfram Sang17f4a5c2014-09-22 19:41:00 +0200609{
Peter Hüwe0aef44e2014-09-12 21:09:47 +0200610 acpi_handle handle;
Jarkko Nikulaaec809f2016-08-12 17:02:52 +0300611 struct i2c_acpi_handler_data *data;
Wolfram Sang17f4a5c2014-09-22 19:41:00 +0200612 acpi_status status;
613
Peter Hüwe0aef44e2014-09-12 21:09:47 +0200614 if (!adapter->dev.parent)
615 return -ENODEV;
616
617 handle = ACPI_HANDLE(adapter->dev.parent);
618
Wolfram Sang17f4a5c2014-09-22 19:41:00 +0200619 if (!handle)
620 return -ENODEV;
621
Jarkko Nikulaaec809f2016-08-12 17:02:52 +0300622 data = kzalloc(sizeof(struct i2c_acpi_handler_data),
Wolfram Sang17f4a5c2014-09-22 19:41:00 +0200623 GFP_KERNEL);
624 if (!data)
625 return -ENOMEM;
626
627 data->adapter = adapter;
628 status = acpi_bus_attach_private_data(handle, (void *)data);
629 if (ACPI_FAILURE(status)) {
630 kfree(data);
631 return -ENOMEM;
632 }
633
634 status = acpi_install_address_space_handler(handle,
635 ACPI_ADR_SPACE_GSBUS,
Jarkko Nikulaaec809f2016-08-12 17:02:52 +0300636 &i2c_acpi_space_handler,
Wolfram Sang17f4a5c2014-09-22 19:41:00 +0200637 NULL,
638 data);
639 if (ACPI_FAILURE(status)) {
640 dev_err(&adapter->dev, "Error installing i2c space handler\n");
641 acpi_bus_detach_private_data(handle);
642 kfree(data);
643 return -ENOMEM;
644 }
645
Lan Tianyu40e7fcb2014-11-23 21:22:54 +0800646 acpi_walk_dep_device_list(handle);
Wolfram Sang17f4a5c2014-09-22 19:41:00 +0200647 return 0;
648}
649
Jarkko Nikulaaec809f2016-08-12 17:02:52 +0300650static void i2c_acpi_remove_space_handler(struct i2c_adapter *adapter)
Wolfram Sang17f4a5c2014-09-22 19:41:00 +0200651{
Peter Hüwe0aef44e2014-09-12 21:09:47 +0200652 acpi_handle handle;
Jarkko Nikulaaec809f2016-08-12 17:02:52 +0300653 struct i2c_acpi_handler_data *data;
Wolfram Sang17f4a5c2014-09-22 19:41:00 +0200654 acpi_status status;
655
Peter Hüwe0aef44e2014-09-12 21:09:47 +0200656 if (!adapter->dev.parent)
657 return;
658
659 handle = ACPI_HANDLE(adapter->dev.parent);
660
Wolfram Sang17f4a5c2014-09-22 19:41:00 +0200661 if (!handle)
662 return;
663
664 acpi_remove_address_space_handler(handle,
665 ACPI_ADR_SPACE_GSBUS,
Jarkko Nikulaaec809f2016-08-12 17:02:52 +0300666 &i2c_acpi_space_handler);
Wolfram Sang17f4a5c2014-09-22 19:41:00 +0200667
668 status = acpi_bus_get_private_data(handle, (void **)&data);
669 if (ACPI_SUCCESS(status))
670 kfree(data);
671
672 acpi_bus_detach_private_data(handle);
673}
674#else /* CONFIG_ACPI_I2C_OPREGION */
Jarkko Nikulaaec809f2016-08-12 17:02:52 +0300675static inline void i2c_acpi_remove_space_handler(struct i2c_adapter *adapter)
Wolfram Sang17f4a5c2014-09-22 19:41:00 +0200676{ }
677
Jarkko Nikulaaec809f2016-08-12 17:02:52 +0300678static inline int i2c_acpi_install_space_handler(struct i2c_adapter *adapter)
Wolfram Sang17f4a5c2014-09-22 19:41:00 +0200679{ return 0; }
680#endif /* CONFIG_ACPI_I2C_OPREGION */
681
David Brownellf37dd802007-02-13 22:09:00 +0100682/* ------------------------------------------------------------------------- */
683
Lee Jones5f441fc2016-11-07 12:47:40 +0000684const struct i2c_device_id *i2c_match_id(const struct i2c_device_id *id,
Jean Delvared2653e92008-04-29 23:11:39 +0200685 const struct i2c_client *client)
686{
Lee Jones811073b2016-11-07 12:47:36 +0000687 if (!(id && client))
688 return NULL;
689
Jean Delvared2653e92008-04-29 23:11:39 +0200690 while (id->name[0]) {
691 if (strcmp(client->name, id->name) == 0)
692 return id;
693 id++;
694 }
695 return NULL;
696}
Lee Jones5f441fc2016-11-07 12:47:40 +0000697EXPORT_SYMBOL_GPL(i2c_match_id);
Jean Delvared2653e92008-04-29 23:11:39 +0200698
Linus Torvalds1da177e2005-04-16 15:20:36 -0700699static int i2c_device_match(struct device *dev, struct device_driver *drv)
700{
Jean Delvare51298d12009-09-18 22:45:45 +0200701 struct i2c_client *client = i2c_verify_client(dev);
702 struct i2c_driver *driver;
David Brownell7b4fbc52007-05-01 23:26:30 +0200703
Jean Delvare51298d12009-09-18 22:45:45 +0200704
Grant Likely959e85f2010-06-08 07:48:19 -0600705 /* Attempt an OF style match */
Lee Jonesda10c062016-11-07 12:47:39 +0000706 if (i2c_of_match_device(drv->of_match_table, client))
Grant Likely959e85f2010-06-08 07:48:19 -0600707 return 1;
708
Mika Westerberg907ddf82012-11-23 12:23:40 +0100709 /* Then ACPI style match */
710 if (acpi_driver_match_device(dev, drv))
711 return 1;
712
Jean Delvare51298d12009-09-18 22:45:45 +0200713 driver = to_i2c_driver(drv);
Lee Jones811073b2016-11-07 12:47:36 +0000714
715 /* Finally an I2C match */
716 if (i2c_match_id(driver->id_table, client))
717 return 1;
Jean Delvared2653e92008-04-29 23:11:39 +0200718
Jean Delvareeb8a7902008-05-18 20:49:41 +0200719 return 0;
Linus Torvalds1da177e2005-04-16 15:20:36 -0700720}
721
Kay Sievers7eff2e72007-08-14 15:15:12 +0200722static int i2c_device_uevent(struct device *dev, struct kobj_uevent_env *env)
David Brownell7b4fbc52007-05-01 23:26:30 +0200723{
Wolfram Sang8dcf3212016-03-23 20:47:02 +0100724 struct i2c_client *client = to_i2c_client(dev);
Zhang Rui8c4ff6d2014-01-14 16:46:37 +0800725 int rc;
726
727 rc = acpi_device_uevent_modalias(dev, env);
728 if (rc != -ENODEV)
729 return rc;
David Brownell7b4fbc52007-05-01 23:26:30 +0200730
Wolfram Sang8dcf3212016-03-23 20:47:02 +0100731 return add_uevent_var(env, "MODALIAS=%s%s", I2C_MODULE_PREFIX, client->name);
David Brownell7b4fbc52007-05-01 23:26:30 +0200732}
733
Viresh Kumar5f9296b2012-02-28 18:26:31 +0530734/* i2c bus recovery routines */
735static int get_scl_gpio_value(struct i2c_adapter *adap)
736{
737 return gpio_get_value(adap->bus_recovery_info->scl_gpio);
738}
739
740static void set_scl_gpio_value(struct i2c_adapter *adap, int val)
741{
742 gpio_set_value(adap->bus_recovery_info->scl_gpio, val);
743}
744
745static int get_sda_gpio_value(struct i2c_adapter *adap)
746{
747 return gpio_get_value(adap->bus_recovery_info->sda_gpio);
748}
749
750static int i2c_get_gpios_for_recovery(struct i2c_adapter *adap)
751{
752 struct i2c_bus_recovery_info *bri = adap->bus_recovery_info;
753 struct device *dev = &adap->dev;
754 int ret = 0;
755
756 ret = gpio_request_one(bri->scl_gpio, GPIOF_OPEN_DRAIN |
757 GPIOF_OUT_INIT_HIGH, "i2c-scl");
758 if (ret) {
759 dev_warn(dev, "Can't get SCL gpio: %d\n", bri->scl_gpio);
760 return ret;
761 }
762
763 if (bri->get_sda) {
764 if (gpio_request_one(bri->sda_gpio, GPIOF_IN, "i2c-sda")) {
765 /* work without SDA polling */
766 dev_warn(dev, "Can't get SDA gpio: %d. Not using SDA polling\n",
767 bri->sda_gpio);
768 bri->get_sda = NULL;
769 }
770 }
771
772 return ret;
773}
774
775static void i2c_put_gpios_for_recovery(struct i2c_adapter *adap)
776{
777 struct i2c_bus_recovery_info *bri = adap->bus_recovery_info;
778
779 if (bri->get_sda)
780 gpio_free(bri->sda_gpio);
781
782 gpio_free(bri->scl_gpio);
783}
784
785/*
786 * We are generating clock pulses. ndelay() determines durating of clk pulses.
787 * We will generate clock with rate 100 KHz and so duration of both clock levels
788 * is: delay in ns = (10^6 / 100) / 2
789 */
790#define RECOVERY_NDELAY 5000
791#define RECOVERY_CLK_CNT 9
792
793static int i2c_generic_recovery(struct i2c_adapter *adap)
794{
795 struct i2c_bus_recovery_info *bri = adap->bus_recovery_info;
796 int i = 0, val = 1, ret = 0;
797
798 if (bri->prepare_recovery)
Grygorii Strashko2b2190a2015-04-06 15:38:39 +0300799 bri->prepare_recovery(adap);
Viresh Kumar5f9296b2012-02-28 18:26:31 +0530800
Jan Luebbe8b062602015-07-08 16:35:06 +0200801 bri->set_scl(adap, val);
802 ndelay(RECOVERY_NDELAY);
803
Viresh Kumar5f9296b2012-02-28 18:26:31 +0530804 /*
805 * By this time SCL is high, as we need to give 9 falling-rising edges
806 */
807 while (i++ < RECOVERY_CLK_CNT * 2) {
808 if (val) {
809 /* Break if SDA is high */
810 if (bri->get_sda && bri->get_sda(adap))
811 break;
812 /* SCL shouldn't be low here */
813 if (!bri->get_scl(adap)) {
814 dev_err(&adap->dev,
815 "SCL is stuck low, exit recovery\n");
816 ret = -EBUSY;
817 break;
818 }
819 }
820
821 val = !val;
822 bri->set_scl(adap, val);
823 ndelay(RECOVERY_NDELAY);
824 }
825
826 if (bri->unprepare_recovery)
Grygorii Strashko2b2190a2015-04-06 15:38:39 +0300827 bri->unprepare_recovery(adap);
Viresh Kumar5f9296b2012-02-28 18:26:31 +0530828
829 return ret;
830}
831
832int i2c_generic_scl_recovery(struct i2c_adapter *adap)
833{
Viresh Kumar5f9296b2012-02-28 18:26:31 +0530834 return i2c_generic_recovery(adap);
835}
Mark Brownc1c21f42015-04-15 19:18:39 +0100836EXPORT_SYMBOL_GPL(i2c_generic_scl_recovery);
Viresh Kumar5f9296b2012-02-28 18:26:31 +0530837
838int i2c_generic_gpio_recovery(struct i2c_adapter *adap)
839{
840 int ret;
841
842 ret = i2c_get_gpios_for_recovery(adap);
843 if (ret)
844 return ret;
845
846 ret = i2c_generic_recovery(adap);
847 i2c_put_gpios_for_recovery(adap);
848
849 return ret;
850}
Mark Brownc1c21f42015-04-15 19:18:39 +0100851EXPORT_SYMBOL_GPL(i2c_generic_gpio_recovery);
Viresh Kumar5f9296b2012-02-28 18:26:31 +0530852
853int i2c_recover_bus(struct i2c_adapter *adap)
854{
855 if (!adap->bus_recovery_info)
856 return -EOPNOTSUPP;
857
858 dev_dbg(&adap->dev, "Trying i2c bus recovery\n");
859 return adap->bus_recovery_info->recover_bus(adap);
860}
Mark Brownc1c21f42015-04-15 19:18:39 +0100861EXPORT_SYMBOL_GPL(i2c_recover_bus);
Viresh Kumar5f9296b2012-02-28 18:26:31 +0530862
Wolfram Sangd3b11d82016-07-09 13:34:59 +0900863static void i2c_init_recovery(struct i2c_adapter *adap)
864{
865 struct i2c_bus_recovery_info *bri = adap->bus_recovery_info;
866 char *err_str;
867
868 if (!bri)
869 return;
870
871 if (!bri->recover_bus) {
872 err_str = "no recover_bus() found";
873 goto err;
874 }
875
876 /* Generic GPIO recovery */
877 if (bri->recover_bus == i2c_generic_gpio_recovery) {
878 if (!gpio_is_valid(bri->scl_gpio)) {
879 err_str = "invalid SCL gpio";
880 goto err;
881 }
882
883 if (gpio_is_valid(bri->sda_gpio))
884 bri->get_sda = get_sda_gpio_value;
885 else
886 bri->get_sda = NULL;
887
888 bri->get_scl = get_scl_gpio_value;
889 bri->set_scl = set_scl_gpio_value;
890 } else if (bri->recover_bus == i2c_generic_scl_recovery) {
891 /* Generic SCL recovery */
892 if (!bri->set_scl || !bri->get_scl) {
893 err_str = "no {get|set}_scl() found";
894 goto err;
895 }
896 }
897
898 return;
899 err:
900 dev_err(&adap->dev, "Not using recovery: %s\n", err_str);
901 adap->bus_recovery_info = NULL;
902}
903
Benjamin Tissoires4d5538f2016-10-13 14:10:40 +0200904static int i2c_smbus_host_notify_to_irq(const struct i2c_client *client)
905{
906 struct i2c_adapter *adap = client->adapter;
907 unsigned int irq;
908
909 if (!adap->host_notify_domain)
910 return -ENXIO;
911
912 if (client->flags & I2C_CLIENT_TEN)
913 return -EINVAL;
914
915 irq = irq_find_mapping(adap->host_notify_domain, client->addr);
916 if (!irq)
917 irq = irq_create_mapping(adap->host_notify_domain,
918 client->addr);
919
920 return irq > 0 ? irq : -ENXIO;
921}
922
Linus Torvalds1da177e2005-04-16 15:20:36 -0700923static int i2c_device_probe(struct device *dev)
924{
Jean Delvare51298d12009-09-18 22:45:45 +0200925 struct i2c_client *client = i2c_verify_client(dev);
926 struct i2c_driver *driver;
Hans Verkuil50c33042008-03-12 14:15:00 +0100927 int status;
David Brownell7b4fbc52007-05-01 23:26:30 +0200928
Jean Delvare51298d12009-09-18 22:45:45 +0200929 if (!client)
930 return 0;
931
Mika Westerberg845c8772015-05-06 13:29:08 +0300932 if (!client->irq) {
933 int irq = -ENOENT;
934
Dmitry Torokhov331c3422017-01-04 20:57:22 -0800935 if (client->flags & I2C_CLIENT_HOST_NOTIFY) {
936 dev_dbg(dev, "Using Host Notify IRQ\n");
937 irq = i2c_smbus_host_notify_to_irq(client);
938 } else if (dev->of_node) {
Dmitry Torokhov3fffd122015-08-17 23:52:51 -0700939 irq = of_irq_get_byname(dev->of_node, "irq");
940 if (irq == -EINVAL || irq == -ENODATA)
941 irq = of_irq_get(dev->of_node, 0);
942 } else if (ACPI_COMPANION(dev)) {
Mika Westerberg845c8772015-05-06 13:29:08 +0300943 irq = acpi_dev_gpio_irq_get(ACPI_COMPANION(dev), 0);
Dmitry Torokhov3fffd122015-08-17 23:52:51 -0700944 }
Geert Uytterhoeven6f34be72014-11-17 12:43:00 +0100945 if (irq == -EPROBE_DEFER)
Laurent Pinchart2fd36c5522014-10-30 15:59:38 +0200946 return irq;
Dmitry Torokhov331c3422017-01-04 20:57:22 -0800947
Geert Uytterhoeven6f34be72014-11-17 12:43:00 +0100948 if (irq < 0)
949 irq = 0;
Laurent Pinchart2fd36c5522014-10-30 15:59:38 +0200950
951 client->irq = irq;
952 }
953
Jean Delvare51298d12009-09-18 22:45:45 +0200954 driver = to_i2c_driver(dev->driver);
Lee Jonesda10c062016-11-07 12:47:39 +0000955
956 /*
957 * An I2C ID table is not mandatory, if and only if, a suitable Device
958 * Tree match table entry is supplied for the probing device.
959 */
960 if (!driver->id_table &&
961 !i2c_of_match_device(dev->driver->of_match_table, client))
David Brownell7b4fbc52007-05-01 23:26:30 +0200962 return -ENODEV;
Lars-Peter Clausen0acc2b32013-09-29 10:51:06 +0200963
Dmitry Torokhov3fffd122015-08-17 23:52:51 -0700964 if (client->flags & I2C_CLIENT_WAKE) {
965 int wakeirq = -ENOENT;
966
967 if (dev->of_node) {
968 wakeirq = of_irq_get_byname(dev->of_node, "wakeup");
969 if (wakeirq == -EPROBE_DEFER)
970 return wakeirq;
971 }
972
973 device_init_wakeup(&client->dev, true);
974
975 if (wakeirq > 0 && wakeirq != client->irq)
976 status = dev_pm_set_dedicated_wake_irq(dev, wakeirq);
977 else if (client->irq > 0)
Grygorii Strashkoc18fba22015-11-12 15:42:26 +0200978 status = dev_pm_set_wake_irq(dev, client->irq);
Dmitry Torokhov3fffd122015-08-17 23:52:51 -0700979 else
980 status = 0;
981
982 if (status)
Andy Shevchenkob93d3d32016-08-25 17:42:10 +0300983 dev_warn(&client->dev, "failed to set up wakeup irq\n");
Dmitry Torokhov3fffd122015-08-17 23:52:51 -0700984 }
985
David Brownell7b4fbc52007-05-01 23:26:30 +0200986 dev_dbg(dev, "probe\n");
Jean Delvared2653e92008-04-29 23:11:39 +0200987
Sylwester Nawrocki86be4082014-06-18 17:29:32 +0200988 status = of_clk_set_defaults(dev->of_node, false);
989 if (status < 0)
Dmitry Torokhov3fffd122015-08-17 23:52:51 -0700990 goto err_clear_wakeup_irq;
Sylwester Nawrocki86be4082014-06-18 17:29:32 +0200991
Ulf Hanssone09b0d42014-09-19 20:27:39 +0200992 status = dev_pm_domain_attach(&client->dev, true);
Kieran Bingham74cedd32015-10-12 21:54:43 +0100993 if (status == -EPROBE_DEFER)
994 goto err_clear_wakeup_irq;
995
Lee Jonesb8a1a4c2016-11-07 12:47:41 +0000996 /*
997 * When there are no more users of probe(),
998 * rename probe_new to probe.
999 */
1000 if (driver->probe_new)
1001 status = driver->probe_new(client);
1002 else if (driver->probe)
1003 status = driver->probe(client,
1004 i2c_match_id(driver->id_table, client));
1005 else
1006 status = -EINVAL;
1007
Kieran Bingham74cedd32015-10-12 21:54:43 +01001008 if (status)
1009 goto err_detach_pm_domain;
Wolfram Sang72fa8182014-01-21 17:48:34 +01001010
Dmitry Torokhov3fffd122015-08-17 23:52:51 -07001011 return 0;
1012
1013err_detach_pm_domain:
1014 dev_pm_domain_detach(&client->dev, true);
1015err_clear_wakeup_irq:
1016 dev_pm_clear_wake_irq(&client->dev);
1017 device_init_wakeup(&client->dev, false);
Hans Verkuil50c33042008-03-12 14:15:00 +01001018 return status;
Linus Torvalds1da177e2005-04-16 15:20:36 -07001019}
1020
1021static int i2c_device_remove(struct device *dev)
1022{
Jean Delvare51298d12009-09-18 22:45:45 +02001023 struct i2c_client *client = i2c_verify_client(dev);
David Brownella1d9e6e2007-05-01 23:26:30 +02001024 struct i2c_driver *driver;
Wolfram Sang72fa8182014-01-21 17:48:34 +01001025 int status = 0;
David Brownella1d9e6e2007-05-01 23:26:30 +02001026
Jean Delvare51298d12009-09-18 22:45:45 +02001027 if (!client || !dev->driver)
David Brownella1d9e6e2007-05-01 23:26:30 +02001028 return 0;
1029
1030 driver = to_i2c_driver(dev->driver);
1031 if (driver->remove) {
1032 dev_dbg(dev, "remove\n");
1033 status = driver->remove(client);
David Brownella1d9e6e2007-05-01 23:26:30 +02001034 }
Wolfram Sang72fa8182014-01-21 17:48:34 +01001035
Ulf Hanssone09b0d42014-09-19 20:27:39 +02001036 dev_pm_domain_detach(&client->dev, true);
Dmitry Torokhov3fffd122015-08-17 23:52:51 -07001037
1038 dev_pm_clear_wake_irq(&client->dev);
1039 device_init_wakeup(&client->dev, false);
1040
David Brownella1d9e6e2007-05-01 23:26:30 +02001041 return status;
Linus Torvalds1da177e2005-04-16 15:20:36 -07001042}
1043
David Brownellf37dd802007-02-13 22:09:00 +01001044static void i2c_device_shutdown(struct device *dev)
1045{
Jean Delvare51298d12009-09-18 22:45:45 +02001046 struct i2c_client *client = i2c_verify_client(dev);
David Brownellf37dd802007-02-13 22:09:00 +01001047 struct i2c_driver *driver;
1048
Jean Delvare51298d12009-09-18 22:45:45 +02001049 if (!client || !dev->driver)
David Brownellf37dd802007-02-13 22:09:00 +01001050 return;
1051 driver = to_i2c_driver(dev->driver);
1052 if (driver->shutdown)
Jean Delvare51298d12009-09-18 22:45:45 +02001053 driver->shutdown(client);
David Brownellf37dd802007-02-13 22:09:00 +01001054}
1055
David Brownell9c1600e2007-05-01 23:26:31 +02001056static void i2c_client_dev_release(struct device *dev)
1057{
1058 kfree(to_i2c_client(dev));
1059}
1060
Zhenwen Xu09b8ce02009-03-28 21:34:46 +01001061static ssize_t
Jean Delvare4f8cf822009-09-18 22:45:46 +02001062show_name(struct device *dev, struct device_attribute *attr, char *buf)
David Brownell7b4fbc52007-05-01 23:26:30 +02001063{
Jean Delvare4f8cf822009-09-18 22:45:46 +02001064 return sprintf(buf, "%s\n", dev->type == &i2c_client_type ?
1065 to_i2c_client(dev)->name : to_i2c_adapter(dev)->name);
David Brownell7b4fbc52007-05-01 23:26:30 +02001066}
Wolfram Sanga5eb71b2015-01-19 20:12:24 +01001067static DEVICE_ATTR(name, S_IRUGO, show_name, NULL);
David Brownell7b4fbc52007-05-01 23:26:30 +02001068
Zhenwen Xu09b8ce02009-03-28 21:34:46 +01001069static ssize_t
1070show_modalias(struct device *dev, struct device_attribute *attr, char *buf)
David Brownell7b4fbc52007-05-01 23:26:30 +02001071{
1072 struct i2c_client *client = to_i2c_client(dev);
Zhang Rui8c4ff6d2014-01-14 16:46:37 +08001073 int len;
1074
1075 len = acpi_device_modalias(dev, buf, PAGE_SIZE -1);
1076 if (len != -ENODEV)
1077 return len;
1078
Jean Delvareeb8a7902008-05-18 20:49:41 +02001079 return sprintf(buf, "%s%s\n", I2C_MODULE_PREFIX, client->name);
David Brownell7b4fbc52007-05-01 23:26:30 +02001080}
Jean Delvare51298d12009-09-18 22:45:45 +02001081static DEVICE_ATTR(modalias, S_IRUGO, show_modalias, NULL);
1082
1083static struct attribute *i2c_dev_attrs[] = {
1084 &dev_attr_name.attr,
David Brownell7b4fbc52007-05-01 23:26:30 +02001085 /* modalias helps coldplug: modprobe $(cat .../modalias) */
Jean Delvare51298d12009-09-18 22:45:45 +02001086 &dev_attr_modalias.attr,
1087 NULL
1088};
Wolfram Sanga5eb71b2015-01-19 20:12:24 +01001089ATTRIBUTE_GROUPS(i2c_dev);
sonic zhang54067ee2009-12-14 21:17:30 +01001090
Jon Smirle9ca9eb2008-07-14 22:38:35 +02001091struct bus_type i2c_bus_type = {
David Brownellf37dd802007-02-13 22:09:00 +01001092 .name = "i2c",
1093 .match = i2c_device_match,
1094 .probe = i2c_device_probe,
1095 .remove = i2c_device_remove,
1096 .shutdown = i2c_device_shutdown,
Russell Kingb864c7d2006-01-05 14:37:50 +00001097};
Jon Smirle9ca9eb2008-07-14 22:38:35 +02001098EXPORT_SYMBOL_GPL(i2c_bus_type);
Russell Kingb864c7d2006-01-05 14:37:50 +00001099
Jean Delvare51298d12009-09-18 22:45:45 +02001100static struct device_type i2c_client_type = {
Wolfram Sanga5eb71b2015-01-19 20:12:24 +01001101 .groups = i2c_dev_groups,
Jean Delvare51298d12009-09-18 22:45:45 +02001102 .uevent = i2c_device_uevent,
1103 .release = i2c_client_dev_release,
1104};
1105
David Brownell9b766b82008-01-27 18:14:51 +01001106
1107/**
1108 * i2c_verify_client - return parameter as i2c_client, or NULL
1109 * @dev: device, probably from some driver model iterator
1110 *
1111 * When traversing the driver model tree, perhaps using driver model
1112 * iterators like @device_for_each_child(), you can't assume very much
1113 * about the nodes you find. Use this function to avoid oopses caused
1114 * by wrongly treating some non-I2C device as an i2c_client.
1115 */
1116struct i2c_client *i2c_verify_client(struct device *dev)
1117{
Jean Delvare51298d12009-09-18 22:45:45 +02001118 return (dev->type == &i2c_client_type)
David Brownell9b766b82008-01-27 18:14:51 +01001119 ? to_i2c_client(dev)
1120 : NULL;
1121}
1122EXPORT_SYMBOL(i2c_verify_client);
1123
1124
Wolfram Sangda899f52015-05-18 21:09:12 +02001125/* Return a unique address which takes the flags of the client into account */
1126static unsigned short i2c_encode_flags_to_addr(struct i2c_client *client)
1127{
1128 unsigned short addr = client->addr;
1129
1130 /* For some client flags, add an arbitrary offset to avoid collisions */
1131 if (client->flags & I2C_CLIENT_TEN)
1132 addr |= I2C_ADDR_OFFSET_TEN_BIT;
1133
1134 if (client->flags & I2C_CLIENT_SLAVE)
1135 addr |= I2C_ADDR_OFFSET_SLAVE;
1136
1137 return addr;
1138}
1139
Jean Delvare3a89db52010-06-03 11:33:52 +02001140/* This is a permissive address validity check, I2C address map constraints
Lucas De Marchi25985ed2011-03-30 22:57:33 -03001141 * are purposely not enforced, except for the general call address. */
Wolfram Sangc4019b72015-07-17 12:50:06 +02001142static int i2c_check_addr_validity(unsigned addr, unsigned short flags)
Jean Delvare3a89db52010-06-03 11:33:52 +02001143{
Wolfram Sangc4019b72015-07-17 12:50:06 +02001144 if (flags & I2C_CLIENT_TEN) {
Jean Delvare3a89db52010-06-03 11:33:52 +02001145 /* 10-bit address, all values are valid */
Wolfram Sangc4019b72015-07-17 12:50:06 +02001146 if (addr > 0x3ff)
Jean Delvare3a89db52010-06-03 11:33:52 +02001147 return -EINVAL;
1148 } else {
1149 /* 7-bit address, reject the general call address */
Wolfram Sangc4019b72015-07-17 12:50:06 +02001150 if (addr == 0x00 || addr > 0x7f)
Jean Delvare3a89db52010-06-03 11:33:52 +02001151 return -EINVAL;
1152 }
1153 return 0;
1154}
1155
Jean Delvare656b8762010-06-03 11:33:53 +02001156/* And this is a strict address validity check, used when probing. If a
1157 * device uses a reserved address, then it shouldn't be probed. 7-bit
1158 * addressing is assumed, 10-bit address devices are rare and should be
1159 * explicitly enumerated. */
Wolfram Sang66be60562015-07-17 12:43:22 +02001160static int i2c_check_7bit_addr_validity_strict(unsigned short addr)
Jean Delvare656b8762010-06-03 11:33:53 +02001161{
1162 /*
1163 * Reserved addresses per I2C specification:
1164 * 0x00 General call address / START byte
1165 * 0x01 CBUS address
1166 * 0x02 Reserved for different bus format
1167 * 0x03 Reserved for future purposes
1168 * 0x04-0x07 Hs-mode master code
1169 * 0x78-0x7b 10-bit slave addressing
1170 * 0x7c-0x7f Reserved for future purposes
1171 */
1172 if (addr < 0x08 || addr > 0x77)
1173 return -EINVAL;
1174 return 0;
1175}
1176
Jean Delvare3b5f7942010-06-03 11:33:55 +02001177static int __i2c_check_addr_busy(struct device *dev, void *addrp)
1178{
1179 struct i2c_client *client = i2c_verify_client(dev);
1180 int addr = *(int *)addrp;
1181
Wolfram Sang9bccc702015-07-17 14:48:56 +02001182 if (client && i2c_encode_flags_to_addr(client) == addr)
Jean Delvare3b5f7942010-06-03 11:33:55 +02001183 return -EBUSY;
1184 return 0;
1185}
1186
Michael Lawnick08263742010-08-11 18:21:02 +02001187/* walk up mux tree */
1188static int i2c_check_mux_parents(struct i2c_adapter *adapter, int addr)
1189{
Jean Delvare97cc4d42010-10-24 18:16:57 +02001190 struct i2c_adapter *parent = i2c_parent_is_i2c_adapter(adapter);
Michael Lawnick08263742010-08-11 18:21:02 +02001191 int result;
1192
1193 result = device_for_each_child(&adapter->dev, &addr,
1194 __i2c_check_addr_busy);
1195
Jean Delvare97cc4d42010-10-24 18:16:57 +02001196 if (!result && parent)
1197 result = i2c_check_mux_parents(parent, addr);
Michael Lawnick08263742010-08-11 18:21:02 +02001198
1199 return result;
1200}
1201
1202/* recurse down mux tree */
1203static int i2c_check_mux_children(struct device *dev, void *addrp)
1204{
1205 int result;
1206
1207 if (dev->type == &i2c_adapter_type)
1208 result = device_for_each_child(dev, addrp,
1209 i2c_check_mux_children);
1210 else
1211 result = __i2c_check_addr_busy(dev, addrp);
1212
1213 return result;
1214}
1215
Jean Delvare3b5f7942010-06-03 11:33:55 +02001216static int i2c_check_addr_busy(struct i2c_adapter *adapter, int addr)
1217{
Jean Delvare97cc4d42010-10-24 18:16:57 +02001218 struct i2c_adapter *parent = i2c_parent_is_i2c_adapter(adapter);
Michael Lawnick08263742010-08-11 18:21:02 +02001219 int result = 0;
1220
Jean Delvare97cc4d42010-10-24 18:16:57 +02001221 if (parent)
1222 result = i2c_check_mux_parents(parent, addr);
Michael Lawnick08263742010-08-11 18:21:02 +02001223
1224 if (!result)
1225 result = device_for_each_child(&adapter->dev, &addr,
1226 i2c_check_mux_children);
1227
1228 return result;
Jean Delvare3b5f7942010-06-03 11:33:55 +02001229}
1230
David Brownell9c1600e2007-05-01 23:26:31 +02001231/**
Peter Rosin8320f492016-05-04 22:15:27 +02001232 * i2c_adapter_lock_bus - Get exclusive access to an I2C bus segment
Jean Delvarefe61e072010-08-11 18:20:58 +02001233 * @adapter: Target I2C bus segment
Peter Rosin8320f492016-05-04 22:15:27 +02001234 * @flags: I2C_LOCK_ROOT_ADAPTER locks the root i2c adapter, I2C_LOCK_SEGMENT
1235 * locks only this branch in the adapter tree
Jean Delvarefe61e072010-08-11 18:20:58 +02001236 */
Peter Rosin8320f492016-05-04 22:15:27 +02001237static void i2c_adapter_lock_bus(struct i2c_adapter *adapter,
1238 unsigned int flags)
Jean Delvarefe61e072010-08-11 18:20:58 +02001239{
Peter Rosinfa96f0c2016-05-04 22:15:28 +02001240 rt_mutex_lock(&adapter->bus_lock);
Jean Delvarefe61e072010-08-11 18:20:58 +02001241}
Jean Delvarefe61e072010-08-11 18:20:58 +02001242
1243/**
Peter Rosin8320f492016-05-04 22:15:27 +02001244 * i2c_adapter_trylock_bus - Try to get exclusive access to an I2C bus segment
Jean Delvarefe61e072010-08-11 18:20:58 +02001245 * @adapter: Target I2C bus segment
Peter Rosin8320f492016-05-04 22:15:27 +02001246 * @flags: I2C_LOCK_ROOT_ADAPTER trylocks the root i2c adapter, I2C_LOCK_SEGMENT
1247 * trylocks only this branch in the adapter tree
Jean Delvarefe61e072010-08-11 18:20:58 +02001248 */
Peter Rosin8320f492016-05-04 22:15:27 +02001249static int i2c_adapter_trylock_bus(struct i2c_adapter *adapter,
1250 unsigned int flags)
Jean Delvarefe61e072010-08-11 18:20:58 +02001251{
Peter Rosinfa96f0c2016-05-04 22:15:28 +02001252 return rt_mutex_trylock(&adapter->bus_lock);
Jean Delvarefe61e072010-08-11 18:20:58 +02001253}
1254
1255/**
Peter Rosin8320f492016-05-04 22:15:27 +02001256 * i2c_adapter_unlock_bus - Release exclusive access to an I2C bus segment
Jean Delvarefe61e072010-08-11 18:20:58 +02001257 * @adapter: Target I2C bus segment
Peter Rosin8320f492016-05-04 22:15:27 +02001258 * @flags: I2C_LOCK_ROOT_ADAPTER unlocks the root i2c adapter, I2C_LOCK_SEGMENT
1259 * unlocks only this branch in the adapter tree
Jean Delvarefe61e072010-08-11 18:20:58 +02001260 */
Peter Rosin8320f492016-05-04 22:15:27 +02001261static void i2c_adapter_unlock_bus(struct i2c_adapter *adapter,
1262 unsigned int flags)
Jean Delvarefe61e072010-08-11 18:20:58 +02001263{
Peter Rosinfa96f0c2016-05-04 22:15:28 +02001264 rt_mutex_unlock(&adapter->bus_lock);
Jean Delvarefe61e072010-08-11 18:20:58 +02001265}
Jean Delvarefe61e072010-08-11 18:20:58 +02001266
Jarkko Nikula70762ab2013-11-14 14:03:52 +02001267static void i2c_dev_set_name(struct i2c_adapter *adap,
1268 struct i2c_client *client)
1269{
1270 struct acpi_device *adev = ACPI_COMPANION(&client->dev);
1271
1272 if (adev) {
1273 dev_set_name(&client->dev, "i2c-%s", acpi_dev_name(adev));
1274 return;
1275 }
1276
Jarkko Nikula70762ab2013-11-14 14:03:52 +02001277 dev_set_name(&client->dev, "%d-%04x", i2c_adapter_id(adap),
Wolfram Sangda899f52015-05-18 21:09:12 +02001278 i2c_encode_flags_to_addr(client));
Jarkko Nikula70762ab2013-11-14 14:03:52 +02001279}
1280
Jean Delvarefe61e072010-08-11 18:20:58 +02001281/**
Jean Delvaref8a227e2009-06-19 16:58:18 +02001282 * i2c_new_device - instantiate an i2c device
David Brownell9c1600e2007-05-01 23:26:31 +02001283 * @adap: the adapter managing the device
1284 * @info: describes one I2C device; bus_num is ignored
David Brownelld64f73b2007-07-12 14:12:28 +02001285 * Context: can sleep
David Brownell9c1600e2007-05-01 23:26:31 +02001286 *
Jean Delvaref8a227e2009-06-19 16:58:18 +02001287 * Create an i2c device. Binding is handled through driver model
1288 * probe()/remove() methods. A driver may be bound to this device when we
1289 * return from this function, or any later moment (e.g. maybe hotplugging will
1290 * load the driver module). This call is not appropriate for use by mainboard
1291 * initialization logic, which usually runs during an arch_initcall() long
1292 * before any i2c_adapter could exist.
David Brownell9c1600e2007-05-01 23:26:31 +02001293 *
1294 * This returns the new i2c client, which may be saved for later use with
1295 * i2c_unregister_device(); or NULL to indicate an error.
1296 */
1297struct i2c_client *
1298i2c_new_device(struct i2c_adapter *adap, struct i2c_board_info const *info)
1299{
1300 struct i2c_client *client;
1301 int status;
1302
1303 client = kzalloc(sizeof *client, GFP_KERNEL);
1304 if (!client)
1305 return NULL;
1306
1307 client->adapter = adap;
1308
1309 client->dev.platform_data = info->platform_data;
David Brownell3bbb8352007-10-13 23:56:29 +02001310
Anton Vorontsov11f1f2a2008-10-22 20:21:33 +02001311 if (info->archdata)
1312 client->dev.archdata = *info->archdata;
1313
Marc Pignatee354252008-08-28 08:33:22 +02001314 client->flags = info->flags;
David Brownell9c1600e2007-05-01 23:26:31 +02001315 client->addr = info->addr;
1316 client->irq = info->irq;
1317
David Brownell9c1600e2007-05-01 23:26:31 +02001318 strlcpy(client->name, info->type, sizeof(client->name));
1319
Wolfram Sangc4019b72015-07-17 12:50:06 +02001320 status = i2c_check_addr_validity(client->addr, client->flags);
Jean Delvare3a89db52010-06-03 11:33:52 +02001321 if (status) {
1322 dev_err(&adap->dev, "Invalid %d-bit I2C address 0x%02hx\n",
1323 client->flags & I2C_CLIENT_TEN ? 10 : 7, client->addr);
1324 goto out_err_silent;
1325 }
1326
Jean Delvaref8a227e2009-06-19 16:58:18 +02001327 /* Check for address business */
Wolfram Sang9bccc702015-07-17 14:48:56 +02001328 status = i2c_check_addr_busy(adap, i2c_encode_flags_to_addr(client));
Jean Delvaref8a227e2009-06-19 16:58:18 +02001329 if (status)
1330 goto out_err;
1331
1332 client->dev.parent = &client->adapter->dev;
1333 client->dev.bus = &i2c_bus_type;
Jean Delvare51298d12009-09-18 22:45:45 +02001334 client->dev.type = &i2c_client_type;
Grant Likelyd12d42f2010-04-13 16:12:28 -07001335 client->dev.of_node = info->of_node;
Rafael J. Wysockice793482015-03-16 23:49:03 +01001336 client->dev.fwnode = info->fwnode;
Jean Delvaref8a227e2009-06-19 16:58:18 +02001337
Jarkko Nikula70762ab2013-11-14 14:03:52 +02001338 i2c_dev_set_name(adap, client);
Jean Delvaref8a227e2009-06-19 16:58:18 +02001339 status = device_register(&client->dev);
1340 if (status)
1341 goto out_err;
1342
Jean Delvaref8a227e2009-06-19 16:58:18 +02001343 dev_dbg(&adap->dev, "client [%s] registered with bus id %s\n",
1344 client->name, dev_name(&client->dev));
1345
David Brownell9c1600e2007-05-01 23:26:31 +02001346 return client;
Jean Delvaref8a227e2009-06-19 16:58:18 +02001347
1348out_err:
Andy Shevchenkob93d3d32016-08-25 17:42:10 +03001349 dev_err(&adap->dev,
1350 "Failed to register i2c client %s at 0x%02x (%d)\n",
1351 client->name, client->addr, status);
Jean Delvare3a89db52010-06-03 11:33:52 +02001352out_err_silent:
Jean Delvaref8a227e2009-06-19 16:58:18 +02001353 kfree(client);
1354 return NULL;
David Brownell9c1600e2007-05-01 23:26:31 +02001355}
1356EXPORT_SYMBOL_GPL(i2c_new_device);
1357
1358
1359/**
1360 * i2c_unregister_device - reverse effect of i2c_new_device()
1361 * @client: value returned from i2c_new_device()
David Brownelld64f73b2007-07-12 14:12:28 +02001362 * Context: can sleep
David Brownell9c1600e2007-05-01 23:26:31 +02001363 */
1364void i2c_unregister_device(struct i2c_client *client)
David Brownella1d9e6e2007-05-01 23:26:30 +02001365{
Pantelis Antoniou4f001fd2015-01-24 09:16:29 +02001366 if (client->dev.of_node)
1367 of_node_clear_flag(client->dev.of_node, OF_POPULATED);
Octavian Purdila525e6fa2016-07-08 19:13:10 +03001368 if (ACPI_COMPANION(&client->dev))
1369 acpi_device_clear_enumerated(ACPI_COMPANION(&client->dev));
David Brownella1d9e6e2007-05-01 23:26:30 +02001370 device_unregister(&client->dev);
1371}
David Brownell9c1600e2007-05-01 23:26:31 +02001372EXPORT_SYMBOL_GPL(i2c_unregister_device);
David Brownella1d9e6e2007-05-01 23:26:30 +02001373
1374
Jean Delvare60b129d2008-05-11 20:37:06 +02001375static const struct i2c_device_id dummy_id[] = {
1376 { "dummy", 0 },
1377 { },
1378};
1379
Jean Delvared2653e92008-04-29 23:11:39 +02001380static int dummy_probe(struct i2c_client *client,
1381 const struct i2c_device_id *id)
1382{
1383 return 0;
1384}
1385
1386static int dummy_remove(struct i2c_client *client)
David Brownelle9f13732008-01-27 18:14:52 +01001387{
1388 return 0;
1389}
1390
1391static struct i2c_driver dummy_driver = {
1392 .driver.name = "dummy",
Jean Delvared2653e92008-04-29 23:11:39 +02001393 .probe = dummy_probe,
1394 .remove = dummy_remove,
Jean Delvare60b129d2008-05-11 20:37:06 +02001395 .id_table = dummy_id,
David Brownelle9f13732008-01-27 18:14:52 +01001396};
1397
1398/**
1399 * i2c_new_dummy - return a new i2c device bound to a dummy driver
1400 * @adapter: the adapter managing the device
1401 * @address: seven bit address to be used
David Brownelle9f13732008-01-27 18:14:52 +01001402 * Context: can sleep
1403 *
1404 * This returns an I2C client bound to the "dummy" driver, intended for use
1405 * with devices that consume multiple addresses. Examples of such chips
1406 * include various EEPROMS (like 24c04 and 24c08 models).
1407 *
1408 * These dummy devices have two main uses. First, most I2C and SMBus calls
1409 * except i2c_transfer() need a client handle; the dummy will be that handle.
1410 * And second, this prevents the specified address from being bound to a
1411 * different driver.
1412 *
1413 * This returns the new i2c client, which should be saved for later use with
1414 * i2c_unregister_device(); or NULL to indicate an error.
1415 */
Zhenwen Xu09b8ce02009-03-28 21:34:46 +01001416struct i2c_client *i2c_new_dummy(struct i2c_adapter *adapter, u16 address)
David Brownelle9f13732008-01-27 18:14:52 +01001417{
1418 struct i2c_board_info info = {
Jean Delvare60b129d2008-05-11 20:37:06 +02001419 I2C_BOARD_INFO("dummy", address),
David Brownelle9f13732008-01-27 18:14:52 +01001420 };
1421
David Brownelle9f13732008-01-27 18:14:52 +01001422 return i2c_new_device(adapter, &info);
1423}
1424EXPORT_SYMBOL_GPL(i2c_new_dummy);
1425
Jean-Michel Hautbois0f614d82016-01-31 16:33:00 +01001426/**
1427 * i2c_new_secondary_device - Helper to get the instantiated secondary address
1428 * and create the associated device
1429 * @client: Handle to the primary client
1430 * @name: Handle to specify which secondary address to get
1431 * @default_addr: Used as a fallback if no secondary address was specified
1432 * Context: can sleep
1433 *
1434 * I2C clients can be composed of multiple I2C slaves bound together in a single
1435 * component. The I2C client driver then binds to the master I2C slave and needs
1436 * to create I2C dummy clients to communicate with all the other slaves.
1437 *
1438 * This function creates and returns an I2C dummy client whose I2C address is
1439 * retrieved from the platform firmware based on the given slave name. If no
1440 * address is specified by the firmware default_addr is used.
1441 *
1442 * On DT-based platforms the address is retrieved from the "reg" property entry
1443 * cell whose "reg-names" value matches the slave name.
1444 *
1445 * This returns the new i2c client, which should be saved for later use with
1446 * i2c_unregister_device(); or NULL to indicate an error.
1447 */
1448struct i2c_client *i2c_new_secondary_device(struct i2c_client *client,
1449 const char *name,
1450 u16 default_addr)
1451{
1452 struct device_node *np = client->dev.of_node;
1453 u32 addr = default_addr;
1454 int i;
1455
1456 if (np) {
1457 i = of_property_match_string(np, "reg-names", name);
1458 if (i >= 0)
1459 of_property_read_u32_index(np, "reg", i, &addr);
1460 }
1461
1462 dev_dbg(&client->adapter->dev, "Address for %s : 0x%x\n", name, addr);
1463 return i2c_new_dummy(client->adapter, addr);
1464}
1465EXPORT_SYMBOL_GPL(i2c_new_secondary_device);
1466
David Brownellf37dd802007-02-13 22:09:00 +01001467/* ------------------------------------------------------------------------- */
1468
David Brownell16ffadf2007-05-01 23:26:28 +02001469/* I2C bus adapters -- one roots each I2C or SMBUS segment */
1470
Adrian Bunk83eaaed2007-10-13 23:56:30 +02001471static void i2c_adapter_dev_release(struct device *dev)
Linus Torvalds1da177e2005-04-16 15:20:36 -07001472{
David Brownellef2c83212007-05-01 23:26:28 +02001473 struct i2c_adapter *adap = to_i2c_adapter(dev);
Linus Torvalds1da177e2005-04-16 15:20:36 -07001474 complete(&adap->dev_released);
1475}
1476
Bartosz Golaszewski8dd1fe12016-09-16 18:02:42 +02001477unsigned int i2c_adapter_depth(struct i2c_adapter *adapter)
Jean Delvare390946b2012-09-10 10:14:02 +02001478{
1479 unsigned int depth = 0;
1480
1481 while ((adapter = i2c_parent_is_i2c_adapter(adapter)))
1482 depth++;
1483
Bartosz Golaszewski2771dc32016-09-16 18:02:44 +02001484 WARN_ONCE(depth >= MAX_LOCKDEP_SUBCLASSES,
1485 "adapter depth exceeds lockdep subclass limit\n");
1486
Jean Delvare390946b2012-09-10 10:14:02 +02001487 return depth;
1488}
Bartosz Golaszewski8dd1fe12016-09-16 18:02:42 +02001489EXPORT_SYMBOL_GPL(i2c_adapter_depth);
Jean Delvare390946b2012-09-10 10:14:02 +02001490
1491/*
Jean Delvare99cd8e22009-06-19 16:58:20 +02001492 * Let users instantiate I2C devices through sysfs. This can be used when
1493 * platform initialization code doesn't contain the proper data for
1494 * whatever reason. Also useful for drivers that do device detection and
1495 * detection fails, either because the device uses an unexpected address,
1496 * or this is a compatible device with different ID register values.
1497 *
1498 * Parameter checking may look overzealous, but we really don't want
1499 * the user to provide incorrect parameters.
1500 */
1501static ssize_t
1502i2c_sysfs_new_device(struct device *dev, struct device_attribute *attr,
1503 const char *buf, size_t count)
1504{
1505 struct i2c_adapter *adap = to_i2c_adapter(dev);
1506 struct i2c_board_info info;
1507 struct i2c_client *client;
1508 char *blank, end;
1509 int res;
1510
Jean Delvare99cd8e22009-06-19 16:58:20 +02001511 memset(&info, 0, sizeof(struct i2c_board_info));
1512
1513 blank = strchr(buf, ' ');
1514 if (!blank) {
1515 dev_err(dev, "%s: Missing parameters\n", "new_device");
1516 return -EINVAL;
1517 }
1518 if (blank - buf > I2C_NAME_SIZE - 1) {
1519 dev_err(dev, "%s: Invalid device name\n", "new_device");
1520 return -EINVAL;
1521 }
1522 memcpy(info.type, buf, blank - buf);
1523
1524 /* Parse remaining parameters, reject extra parameters */
1525 res = sscanf(++blank, "%hi%c", &info.addr, &end);
1526 if (res < 1) {
1527 dev_err(dev, "%s: Can't parse I2C address\n", "new_device");
1528 return -EINVAL;
1529 }
1530 if (res > 1 && end != '\n') {
1531 dev_err(dev, "%s: Extra parameters\n", "new_device");
1532 return -EINVAL;
1533 }
1534
Wolfram Sangcfa03272015-07-27 14:03:38 +02001535 if ((info.addr & I2C_ADDR_OFFSET_TEN_BIT) == I2C_ADDR_OFFSET_TEN_BIT) {
1536 info.addr &= ~I2C_ADDR_OFFSET_TEN_BIT;
1537 info.flags |= I2C_CLIENT_TEN;
1538 }
1539
1540 if (info.addr & I2C_ADDR_OFFSET_SLAVE) {
1541 info.addr &= ~I2C_ADDR_OFFSET_SLAVE;
1542 info.flags |= I2C_CLIENT_SLAVE;
1543 }
1544
Jean Delvare99cd8e22009-06-19 16:58:20 +02001545 client = i2c_new_device(adap, &info);
1546 if (!client)
Jean Delvare3a89db52010-06-03 11:33:52 +02001547 return -EINVAL;
Jean Delvare99cd8e22009-06-19 16:58:20 +02001548
1549 /* Keep track of the added device */
Jean Delvaredafc50d2010-08-11 18:21:01 +02001550 mutex_lock(&adap->userspace_clients_lock);
Jean Delvare6629dcf2010-05-04 11:09:28 +02001551 list_add_tail(&client->detected, &adap->userspace_clients);
Jean Delvaredafc50d2010-08-11 18:21:01 +02001552 mutex_unlock(&adap->userspace_clients_lock);
Jean Delvare99cd8e22009-06-19 16:58:20 +02001553 dev_info(dev, "%s: Instantiated device %s at 0x%02hx\n", "new_device",
1554 info.type, info.addr);
1555
1556 return count;
1557}
Wolfram Sanga5eb71b2015-01-19 20:12:24 +01001558static DEVICE_ATTR(new_device, S_IWUSR, NULL, i2c_sysfs_new_device);
Jean Delvare99cd8e22009-06-19 16:58:20 +02001559
1560/*
1561 * And of course let the users delete the devices they instantiated, if
1562 * they got it wrong. This interface can only be used to delete devices
1563 * instantiated by i2c_sysfs_new_device above. This guarantees that we
1564 * don't delete devices to which some kernel code still has references.
1565 *
1566 * Parameter checking may look overzealous, but we really don't want
1567 * the user to delete the wrong device.
1568 */
1569static ssize_t
1570i2c_sysfs_delete_device(struct device *dev, struct device_attribute *attr,
1571 const char *buf, size_t count)
1572{
1573 struct i2c_adapter *adap = to_i2c_adapter(dev);
1574 struct i2c_client *client, *next;
1575 unsigned short addr;
1576 char end;
1577 int res;
1578
1579 /* Parse parameters, reject extra parameters */
1580 res = sscanf(buf, "%hi%c", &addr, &end);
1581 if (res < 1) {
1582 dev_err(dev, "%s: Can't parse I2C address\n", "delete_device");
1583 return -EINVAL;
1584 }
1585 if (res > 1 && end != '\n') {
1586 dev_err(dev, "%s: Extra parameters\n", "delete_device");
1587 return -EINVAL;
1588 }
1589
1590 /* Make sure the device was added through sysfs */
1591 res = -ENOENT;
Jean Delvare390946b2012-09-10 10:14:02 +02001592 mutex_lock_nested(&adap->userspace_clients_lock,
1593 i2c_adapter_depth(adap));
Jean Delvare6629dcf2010-05-04 11:09:28 +02001594 list_for_each_entry_safe(client, next, &adap->userspace_clients,
1595 detected) {
Wolfram Sangcfa03272015-07-27 14:03:38 +02001596 if (i2c_encode_flags_to_addr(client) == addr) {
Jean Delvare99cd8e22009-06-19 16:58:20 +02001597 dev_info(dev, "%s: Deleting device %s at 0x%02hx\n",
1598 "delete_device", client->name, client->addr);
1599
1600 list_del(&client->detected);
1601 i2c_unregister_device(client);
1602 res = count;
1603 break;
1604 }
1605 }
Jean Delvaredafc50d2010-08-11 18:21:01 +02001606 mutex_unlock(&adap->userspace_clients_lock);
Jean Delvare99cd8e22009-06-19 16:58:20 +02001607
1608 if (res < 0)
1609 dev_err(dev, "%s: Can't find device in list\n",
1610 "delete_device");
1611 return res;
1612}
Alexander Sverdline9b526f2013-05-17 14:56:35 +02001613static DEVICE_ATTR_IGNORE_LOCKDEP(delete_device, S_IWUSR, NULL,
1614 i2c_sysfs_delete_device);
Jean Delvare4f8cf822009-09-18 22:45:46 +02001615
1616static struct attribute *i2c_adapter_attrs[] = {
1617 &dev_attr_name.attr,
1618 &dev_attr_new_device.attr,
1619 &dev_attr_delete_device.attr,
1620 NULL
David Brownell16ffadf2007-05-01 23:26:28 +02001621};
Wolfram Sanga5eb71b2015-01-19 20:12:24 +01001622ATTRIBUTE_GROUPS(i2c_adapter);
Jean Delvare4f8cf822009-09-18 22:45:46 +02001623
Michael Lawnick08263742010-08-11 18:21:02 +02001624struct device_type i2c_adapter_type = {
Wolfram Sanga5eb71b2015-01-19 20:12:24 +01001625 .groups = i2c_adapter_groups,
Jean Delvare4f8cf822009-09-18 22:45:46 +02001626 .release = i2c_adapter_dev_release,
David Brownell16ffadf2007-05-01 23:26:28 +02001627};
Michael Lawnick08263742010-08-11 18:21:02 +02001628EXPORT_SYMBOL_GPL(i2c_adapter_type);
Linus Torvalds1da177e2005-04-16 15:20:36 -07001629
Stephen Warren643dd092012-04-17 12:43:33 -06001630/**
1631 * i2c_verify_adapter - return parameter as i2c_adapter or NULL
1632 * @dev: device, probably from some driver model iterator
1633 *
1634 * When traversing the driver model tree, perhaps using driver model
1635 * iterators like @device_for_each_child(), you can't assume very much
1636 * about the nodes you find. Use this function to avoid oopses caused
1637 * by wrongly treating some non-I2C device as an i2c_adapter.
1638 */
1639struct i2c_adapter *i2c_verify_adapter(struct device *dev)
1640{
1641 return (dev->type == &i2c_adapter_type)
1642 ? to_i2c_adapter(dev)
1643 : NULL;
1644}
1645EXPORT_SYMBOL(i2c_verify_adapter);
1646
Jean Delvare2bb50952009-09-18 22:45:46 +02001647#ifdef CONFIG_I2C_COMPAT
1648static struct class_compat *i2c_adapter_compat_class;
1649#endif
1650
David Brownell9c1600e2007-05-01 23:26:31 +02001651static void i2c_scan_static_board_info(struct i2c_adapter *adapter)
1652{
1653 struct i2c_devinfo *devinfo;
1654
Rodolfo Giomettif18c41d2009-06-19 16:58:20 +02001655 down_read(&__i2c_board_lock);
David Brownell9c1600e2007-05-01 23:26:31 +02001656 list_for_each_entry(devinfo, &__i2c_board_list, list) {
1657 if (devinfo->busnum == adapter->nr
1658 && !i2c_new_device(adapter,
1659 &devinfo->board_info))
Zhenwen Xu09b8ce02009-03-28 21:34:46 +01001660 dev_err(&adapter->dev,
1661 "Can't create device at 0x%02x\n",
David Brownell9c1600e2007-05-01 23:26:31 +02001662 devinfo->board_info.addr);
1663 }
Rodolfo Giomettif18c41d2009-06-19 16:58:20 +02001664 up_read(&__i2c_board_lock);
David Brownell9c1600e2007-05-01 23:26:31 +02001665}
1666
Wolfram Sang687b81d2013-07-11 12:56:15 +01001667/* OF support code */
1668
1669#if IS_ENABLED(CONFIG_OF)
Pantelis Antonioua430a3452014-10-28 22:36:02 +02001670static struct i2c_client *of_i2c_register_device(struct i2c_adapter *adap,
1671 struct device_node *node)
1672{
1673 struct i2c_client *result;
1674 struct i2c_board_info info = {};
1675 struct dev_archdata dev_ad = {};
Wolfram Sangb4e2f6a2015-05-19 21:04:40 +02001676 const __be32 *addr_be;
1677 u32 addr;
Pantelis Antonioua430a3452014-10-28 22:36:02 +02001678 int len;
1679
1680 dev_dbg(&adap->dev, "of_i2c: register %s\n", node->full_name);
1681
1682 if (of_modalias_node(node, info.type, sizeof(info.type)) < 0) {
1683 dev_err(&adap->dev, "of_i2c: modalias failure on %s\n",
1684 node->full_name);
1685 return ERR_PTR(-EINVAL);
1686 }
1687
Wolfram Sangb4e2f6a2015-05-19 21:04:40 +02001688 addr_be = of_get_property(node, "reg", &len);
1689 if (!addr_be || (len < sizeof(*addr_be))) {
Pantelis Antonioua430a3452014-10-28 22:36:02 +02001690 dev_err(&adap->dev, "of_i2c: invalid reg on %s\n",
1691 node->full_name);
1692 return ERR_PTR(-EINVAL);
1693 }
1694
Wolfram Sangb4e2f6a2015-05-19 21:04:40 +02001695 addr = be32_to_cpup(addr_be);
1696 if (addr & I2C_TEN_BIT_ADDRESS) {
1697 addr &= ~I2C_TEN_BIT_ADDRESS;
1698 info.flags |= I2C_CLIENT_TEN;
1699 }
1700
1701 if (addr & I2C_OWN_SLAVE_ADDRESS) {
1702 addr &= ~I2C_OWN_SLAVE_ADDRESS;
1703 info.flags |= I2C_CLIENT_SLAVE;
1704 }
1705
1706 if (i2c_check_addr_validity(addr, info.flags)) {
Pantelis Antonioua430a3452014-10-28 22:36:02 +02001707 dev_err(&adap->dev, "of_i2c: invalid addr=%x on %s\n",
John Garry6f724fb2017-01-06 19:02:57 +08001708 addr, node->full_name);
Pantelis Antonioua430a3452014-10-28 22:36:02 +02001709 return ERR_PTR(-EINVAL);
1710 }
1711
Wolfram Sangb4e2f6a2015-05-19 21:04:40 +02001712 info.addr = addr;
Pantelis Antonioua430a3452014-10-28 22:36:02 +02001713 info.of_node = of_node_get(node);
1714 info.archdata = &dev_ad;
1715
Dmitry Torokhov331c3422017-01-04 20:57:22 -08001716 if (of_property_read_bool(node, "host-notify"))
1717 info.flags |= I2C_CLIENT_HOST_NOTIFY;
1718
Pantelis Antonioua430a3452014-10-28 22:36:02 +02001719 if (of_get_property(node, "wakeup-source", NULL))
1720 info.flags |= I2C_CLIENT_WAKE;
1721
Pantelis Antonioua430a3452014-10-28 22:36:02 +02001722 result = i2c_new_device(adap, &info);
1723 if (result == NULL) {
1724 dev_err(&adap->dev, "of_i2c: Failure registering %s\n",
1725 node->full_name);
1726 of_node_put(node);
Pantelis Antonioua430a3452014-10-28 22:36:02 +02001727 return ERR_PTR(-EINVAL);
1728 }
1729 return result;
1730}
1731
Wolfram Sang687b81d2013-07-11 12:56:15 +01001732static void of_i2c_register_devices(struct i2c_adapter *adap)
1733{
Jon Hunter7e4c2242016-06-29 10:17:53 +01001734 struct device_node *bus, *node;
Ralf Ramsauer6a676fb2016-10-17 15:59:57 +02001735 struct i2c_client *client;
Wolfram Sang687b81d2013-07-11 12:56:15 +01001736
1737 /* Only register child devices if the adapter has a node pointer set */
1738 if (!adap->dev.of_node)
1739 return;
1740
1741 dev_dbg(&adap->dev, "of_i2c: walking child nodes\n");
1742
Jon Hunter7e4c2242016-06-29 10:17:53 +01001743 bus = of_get_child_by_name(adap->dev.of_node, "i2c-bus");
1744 if (!bus)
1745 bus = of_node_get(adap->dev.of_node);
1746
1747 for_each_available_child_of_node(bus, node) {
Pantelis Antoniou4f001fd2015-01-24 09:16:29 +02001748 if (of_node_test_and_set_flag(node, OF_POPULATED))
1749 continue;
Ralf Ramsauer6a676fb2016-10-17 15:59:57 +02001750
1751 client = of_i2c_register_device(adap, node);
1752 if (IS_ERR(client)) {
1753 dev_warn(&adap->dev,
1754 "Failed to create I2C device for %s\n",
1755 node->full_name);
1756 of_node_clear_flag(node, OF_POPULATED);
1757 }
Pantelis Antoniou4f001fd2015-01-24 09:16:29 +02001758 }
Jon Hunter7e4c2242016-06-29 10:17:53 +01001759
1760 of_node_put(bus);
Wolfram Sang687b81d2013-07-11 12:56:15 +01001761}
1762
1763static int of_dev_node_match(struct device *dev, void *data)
1764{
1765 return dev->of_node == data;
1766}
1767
1768/* must call put_device() when done with returned i2c_client device */
1769struct i2c_client *of_find_i2c_device_by_node(struct device_node *node)
1770{
1771 struct device *dev;
Vladimir Zapolskiye3311462015-07-27 17:30:48 +03001772 struct i2c_client *client;
Wolfram Sang687b81d2013-07-11 12:56:15 +01001773
Vladimir Zapolskiye3311462015-07-27 17:30:48 +03001774 dev = bus_find_device(&i2c_bus_type, NULL, node, of_dev_node_match);
Wolfram Sang687b81d2013-07-11 12:56:15 +01001775 if (!dev)
1776 return NULL;
1777
Vladimir Zapolskiye3311462015-07-27 17:30:48 +03001778 client = i2c_verify_client(dev);
1779 if (!client)
1780 put_device(dev);
1781
1782 return client;
Wolfram Sang687b81d2013-07-11 12:56:15 +01001783}
1784EXPORT_SYMBOL(of_find_i2c_device_by_node);
1785
1786/* must call put_device() when done with returned i2c_adapter device */
1787struct i2c_adapter *of_find_i2c_adapter_by_node(struct device_node *node)
1788{
1789 struct device *dev;
Vladimir Zapolskiye3311462015-07-27 17:30:48 +03001790 struct i2c_adapter *adapter;
Wolfram Sang687b81d2013-07-11 12:56:15 +01001791
Vladimir Zapolskiye3311462015-07-27 17:30:48 +03001792 dev = bus_find_device(&i2c_bus_type, NULL, node, of_dev_node_match);
Wolfram Sang687b81d2013-07-11 12:56:15 +01001793 if (!dev)
1794 return NULL;
1795
Vladimir Zapolskiye3311462015-07-27 17:30:48 +03001796 adapter = i2c_verify_adapter(dev);
1797 if (!adapter)
1798 put_device(dev);
1799
1800 return adapter;
Wolfram Sang687b81d2013-07-11 12:56:15 +01001801}
1802EXPORT_SYMBOL(of_find_i2c_adapter_by_node);
Vladimir Zapolskiy48e97432015-07-27 17:30:50 +03001803
1804/* must call i2c_put_adapter() when done with returned i2c_adapter device */
1805struct i2c_adapter *of_get_i2c_adapter_by_node(struct device_node *node)
1806{
1807 struct i2c_adapter *adapter;
1808
1809 adapter = of_find_i2c_adapter_by_node(node);
1810 if (!adapter)
1811 return NULL;
1812
1813 if (!try_module_get(adapter->owner)) {
1814 put_device(&adapter->dev);
1815 adapter = NULL;
1816 }
1817
1818 return adapter;
1819}
1820EXPORT_SYMBOL(of_get_i2c_adapter_by_node);
Lee Jonescabcf4f2016-11-07 12:47:37 +00001821
1822static const struct of_device_id*
1823i2c_of_match_device_sysfs(const struct of_device_id *matches,
1824 struct i2c_client *client)
1825{
1826 const char *name;
1827
1828 for (; matches->compatible[0]; matches++) {
1829 /*
1830 * Adding devices through the i2c sysfs interface provides us
1831 * a string to match which may be compatible with the device
1832 * tree compatible strings, however with no actual of_node the
1833 * of_match_device() will not match
1834 */
1835 if (sysfs_streq(client->name, matches->compatible))
1836 return matches;
1837
1838 name = strchr(matches->compatible, ',');
1839 if (!name)
1840 name = matches->compatible;
1841 else
1842 name++;
1843
1844 if (sysfs_streq(client->name, name))
1845 return matches;
1846 }
1847
1848 return NULL;
1849}
1850
Lee Jones298d4de2016-11-07 12:47:38 +00001851const struct of_device_id
1852*i2c_of_match_device(const struct of_device_id *matches,
1853 struct i2c_client *client)
1854{
1855 const struct of_device_id *match;
1856
1857 if (!(client && matches))
1858 return NULL;
1859
1860 match = of_match_device(matches, &client->dev);
1861 if (match)
1862 return match;
1863
1864 return i2c_of_match_device_sysfs(matches, client);
1865}
1866EXPORT_SYMBOL_GPL(i2c_of_match_device);
Wolfram Sang687b81d2013-07-11 12:56:15 +01001867#else
1868static void of_i2c_register_devices(struct i2c_adapter *adap) { }
1869#endif /* CONFIG_OF */
1870
Jean Delvare69b00892009-12-06 17:06:27 +01001871static int i2c_do_add_adapter(struct i2c_driver *driver,
1872 struct i2c_adapter *adap)
Jean Delvare026526f2008-01-27 18:14:49 +01001873{
Jean Delvare4735c982008-07-14 22:38:36 +02001874 /* Detect supported devices on that bus, and instantiate them */
1875 i2c_detect(adap, driver);
1876
1877 /* Let legacy drivers scan this bus for matching devices */
Jean Delvare026526f2008-01-27 18:14:49 +01001878 if (driver->attach_adapter) {
Jean Delvarea920ff42011-04-17 10:20:19 +02001879 dev_warn(&adap->dev, "%s: attach_adapter method is deprecated\n",
1880 driver->driver.name);
Andy Shevchenkob93d3d32016-08-25 17:42:10 +03001881 dev_warn(&adap->dev,
1882 "Please use another way to instantiate your i2c_client\n");
Jean Delvare026526f2008-01-27 18:14:49 +01001883 /* We ignore the return code; if it fails, too bad */
1884 driver->attach_adapter(adap);
1885 }
1886 return 0;
1887}
1888
Jean Delvare69b00892009-12-06 17:06:27 +01001889static int __process_new_adapter(struct device_driver *d, void *data)
1890{
1891 return i2c_do_add_adapter(to_i2c_driver(d), data);
1892}
1893
Peter Rosind1ed7982016-08-25 23:07:01 +02001894static const struct i2c_lock_operations i2c_adapter_lock_ops = {
1895 .lock_bus = i2c_adapter_lock_bus,
1896 .trylock_bus = i2c_adapter_trylock_bus,
1897 .unlock_bus = i2c_adapter_unlock_bus,
1898};
1899
Benjamin Tissoires4d5538f2016-10-13 14:10:40 +02001900static void i2c_host_notify_irq_teardown(struct i2c_adapter *adap)
1901{
1902 struct irq_domain *domain = adap->host_notify_domain;
1903 irq_hw_number_t hwirq;
1904
1905 if (!domain)
1906 return;
1907
1908 for (hwirq = 0 ; hwirq < I2C_ADDR_7BITS_COUNT ; hwirq++)
1909 irq_dispose_mapping(irq_find_mapping(domain, hwirq));
1910
1911 irq_domain_remove(domain);
1912 adap->host_notify_domain = NULL;
1913}
1914
1915static int i2c_host_notify_irq_map(struct irq_domain *h,
1916 unsigned int virq,
1917 irq_hw_number_t hw_irq_num)
1918{
1919 irq_set_chip_and_handler(virq, &dummy_irq_chip, handle_simple_irq);
1920
1921 return 0;
1922}
1923
1924static const struct irq_domain_ops i2c_host_notify_irq_ops = {
1925 .map = i2c_host_notify_irq_map,
1926};
1927
1928static int i2c_setup_host_notify_irq_domain(struct i2c_adapter *adap)
1929{
1930 struct irq_domain *domain;
1931
1932 if (!i2c_check_functionality(adap, I2C_FUNC_SMBUS_HOST_NOTIFY))
1933 return 0;
1934
1935 domain = irq_domain_create_linear(adap->dev.fwnode,
1936 I2C_ADDR_7BITS_COUNT,
1937 &i2c_host_notify_irq_ops, adap);
1938 if (!domain)
1939 return -ENOMEM;
1940
1941 adap->host_notify_domain = domain;
1942
1943 return 0;
1944}
1945
1946/**
1947 * i2c_handle_smbus_host_notify - Forward a Host Notify event to the correct
1948 * I2C client.
1949 * @adap: the adapter
1950 * @addr: the I2C address of the notifying device
1951 * Context: can't sleep
1952 *
1953 * Helper function to be called from an I2C bus driver's interrupt
1954 * handler. It will schedule the Host Notify IRQ.
1955 */
1956int i2c_handle_smbus_host_notify(struct i2c_adapter *adap, unsigned short addr)
1957{
1958 int irq;
1959
1960 if (!adap)
1961 return -EINVAL;
1962
1963 irq = irq_find_mapping(adap->host_notify_domain, addr);
1964 if (irq <= 0)
1965 return -ENXIO;
1966
1967 generic_handle_irq(irq);
1968
1969 return 0;
1970}
1971EXPORT_SYMBOL_GPL(i2c_handle_smbus_host_notify);
1972
David Brownell6e13e642007-05-01 23:26:31 +02001973static int i2c_register_adapter(struct i2c_adapter *adap)
Linus Torvalds1da177e2005-04-16 15:20:36 -07001974{
Wolfram Sangce0dffa2016-07-09 13:34:58 +09001975 int res = -EINVAL;
Linus Torvalds1da177e2005-04-16 15:20:36 -07001976
David Brownell1d0b19c2008-10-14 17:30:05 +02001977 /* Can't register until after driver model init */
Sudip Mukherjee95026652016-03-07 17:19:17 +05301978 if (WARN_ON(!is_registered)) {
Jean Delvare35fc37f2009-06-19 16:58:19 +02001979 res = -EAGAIN;
1980 goto out_list;
1981 }
David Brownell1d0b19c2008-10-14 17:30:05 +02001982
Jean Delvare2236baa2010-11-15 22:40:38 +01001983 /* Sanity checks */
Wolfram Sang8ddfe412016-07-09 13:35:00 +09001984 if (WARN(!adap->name[0], "i2c adapter has no name"))
Wolfram Sangce0dffa2016-07-09 13:34:58 +09001985 goto out_list;
Wolfram Sang8ddfe412016-07-09 13:35:00 +09001986
1987 if (!adap->algo) {
Wolfram Sang44239a52016-07-09 13:35:04 +09001988 pr_err("adapter '%s': no algo supplied!\n", adap->name);
Wolfram Sangce0dffa2016-07-09 13:34:58 +09001989 goto out_list;
Jean Delvare2236baa2010-11-15 22:40:38 +01001990 }
1991
Peter Rosind1ed7982016-08-25 23:07:01 +02001992 if (!adap->lock_ops)
1993 adap->lock_ops = &i2c_adapter_lock_ops;
Peter Rosin8320f492016-05-04 22:15:27 +02001994
Mika Kuoppala194684e2009-12-06 17:06:22 +01001995 rt_mutex_init(&adap->bus_lock);
Peter Rosin6ef91fc2016-05-04 22:15:29 +02001996 rt_mutex_init(&adap->mux_lock);
Jean Delvaredafc50d2010-08-11 18:21:01 +02001997 mutex_init(&adap->userspace_clients_lock);
Jean Delvare6629dcf2010-05-04 11:09:28 +02001998 INIT_LIST_HEAD(&adap->userspace_clients);
Linus Torvalds1da177e2005-04-16 15:20:36 -07001999
Jean Delvare8fcfef62009-03-28 21:34:43 +01002000 /* Set default timeout to 1 second if not already set */
2001 if (adap->timeout == 0)
2002 adap->timeout = HZ;
2003
Benjamin Tissoires4d5538f2016-10-13 14:10:40 +02002004 /* register soft irqs for Host Notify */
2005 res = i2c_setup_host_notify_irq_domain(adap);
2006 if (res) {
2007 pr_err("adapter '%s': can't create Host Notify IRQs (%d)\n",
2008 adap->name, res);
2009 goto out_list;
2010 }
2011
Kay Sievers27d9c182009-01-07 14:29:16 +01002012 dev_set_name(&adap->dev, "i2c-%d", adap->nr);
Jean Delvare4f8cf822009-09-18 22:45:46 +02002013 adap->dev.bus = &i2c_bus_type;
2014 adap->dev.type = &i2c_adapter_type;
Jean Delvareb119c6c2006-08-15 18:26:30 +02002015 res = device_register(&adap->dev);
Wolfram Sang8ddfe412016-07-09 13:35:00 +09002016 if (res) {
Wolfram Sang44239a52016-07-09 13:35:04 +09002017 pr_err("adapter '%s': can't register device (%d)\n", adap->name, res);
Jean Delvareb119c6c2006-08-15 18:26:30 +02002018 goto out_list;
Wolfram Sang8ddfe412016-07-09 13:35:00 +09002019 }
Linus Torvalds1da177e2005-04-16 15:20:36 -07002020
Jean Delvareb6d7b3d2005-07-31 19:02:53 +02002021 dev_dbg(&adap->dev, "adapter [%s] registered\n", adap->name);
2022
Charles Keepax6ada5c12015-04-16 13:05:19 +01002023 pm_runtime_no_callbacks(&adap->dev);
Linus Walleij04f59142016-04-12 09:57:35 +02002024 pm_suspend_ignore_children(&adap->dev, true);
Wolfram Sang9f924162015-12-23 18:19:28 +01002025 pm_runtime_enable(&adap->dev);
Charles Keepax6ada5c12015-04-16 13:05:19 +01002026
Jean Delvare2bb50952009-09-18 22:45:46 +02002027#ifdef CONFIG_I2C_COMPAT
2028 res = class_compat_create_link(i2c_adapter_compat_class, &adap->dev,
2029 adap->dev.parent);
2030 if (res)
2031 dev_warn(&adap->dev,
2032 "Failed to create compatibility class link\n");
2033#endif
2034
Wolfram Sangd3b11d82016-07-09 13:34:59 +09002035 i2c_init_recovery(adap);
Viresh Kumar5f9296b2012-02-28 18:26:31 +05302036
Jean Delvare729d6dd2009-06-19 16:58:18 +02002037 /* create pre-declared device nodes */
Wolfram Sang687b81d2013-07-11 12:56:15 +01002038 of_i2c_register_devices(adap);
Jarkko Nikulaaec809f2016-08-12 17:02:52 +03002039 i2c_acpi_register_devices(adap);
2040 i2c_acpi_install_space_handler(adap);
Wolfram Sang687b81d2013-07-11 12:56:15 +01002041
David Brownell6e13e642007-05-01 23:26:31 +02002042 if (adap->nr < __i2c_first_dynamic_bus_num)
2043 i2c_scan_static_board_info(adap);
2044
Jean Delvare4735c982008-07-14 22:38:36 +02002045 /* Notify drivers */
Jean Delvare35fc37f2009-06-19 16:58:19 +02002046 mutex_lock(&core_lock);
Jean Delvared6703282010-08-11 18:20:59 +02002047 bus_for_each_drv(&i2c_bus_type, NULL, adap, __process_new_adapter);
Jean Delvarecaada322008-01-27 18:14:49 +01002048 mutex_unlock(&core_lock);
Jean Delvare35fc37f2009-06-19 16:58:19 +02002049
2050 return 0;
Jean Delvareb119c6c2006-08-15 18:26:30 +02002051
Jean Delvareb119c6c2006-08-15 18:26:30 +02002052out_list:
Jean Delvare35fc37f2009-06-19 16:58:19 +02002053 mutex_lock(&core_lock);
Jean Delvareb119c6c2006-08-15 18:26:30 +02002054 idr_remove(&i2c_adapter_idr, adap->nr);
Jean Delvare35fc37f2009-06-19 16:58:19 +02002055 mutex_unlock(&core_lock);
2056 return res;
Linus Torvalds1da177e2005-04-16 15:20:36 -07002057}
2058
David Brownell6e13e642007-05-01 23:26:31 +02002059/**
Doug Andersonee5c2742013-03-01 08:57:31 -08002060 * __i2c_add_numbered_adapter - i2c_add_numbered_adapter where nr is never -1
2061 * @adap: the adapter to register (with adap->nr initialized)
2062 * Context: can sleep
2063 *
2064 * See i2c_add_numbered_adapter() for details.
2065 */
2066static int __i2c_add_numbered_adapter(struct i2c_adapter *adap)
2067{
Wolfram Sang84d0b612016-07-09 13:35:01 +09002068 int id;
Doug Andersonee5c2742013-03-01 08:57:31 -08002069
2070 mutex_lock(&core_lock);
Wolfram Sang84d0b612016-07-09 13:35:01 +09002071 id = idr_alloc(&i2c_adapter_idr, adap, adap->nr, adap->nr + 1, GFP_KERNEL);
Doug Andersonee5c2742013-03-01 08:57:31 -08002072 mutex_unlock(&core_lock);
Wolfram Sang84d0b612016-07-09 13:35:01 +09002073 if (WARN(id < 0, "couldn't get idr"))
Doug Andersonee5c2742013-03-01 08:57:31 -08002074 return id == -ENOSPC ? -EBUSY : id;
2075
2076 return i2c_register_adapter(adap);
2077}
2078
2079/**
David Brownell6e13e642007-05-01 23:26:31 +02002080 * i2c_add_adapter - declare i2c adapter, use dynamic bus number
2081 * @adapter: the adapter to add
David Brownelld64f73b2007-07-12 14:12:28 +02002082 * Context: can sleep
David Brownell6e13e642007-05-01 23:26:31 +02002083 *
2084 * This routine is used to declare an I2C adapter when its bus number
Doug Andersonee5c2742013-03-01 08:57:31 -08002085 * doesn't matter or when its bus number is specified by an dt alias.
2086 * Examples of bases when the bus number doesn't matter: I2C adapters
2087 * dynamically added by USB links or PCI plugin cards.
David Brownell6e13e642007-05-01 23:26:31 +02002088 *
2089 * When this returns zero, a new bus number was allocated and stored
2090 * in adap->nr, and the specified adapter became available for clients.
2091 * Otherwise, a negative errno value is returned.
2092 */
2093int i2c_add_adapter(struct i2c_adapter *adapter)
2094{
Doug Andersonee5c2742013-03-01 08:57:31 -08002095 struct device *dev = &adapter->dev;
Tejun Heo4ae42b02013-02-27 17:04:15 -08002096 int id;
David Brownell6e13e642007-05-01 23:26:31 +02002097
Doug Andersonee5c2742013-03-01 08:57:31 -08002098 if (dev->of_node) {
2099 id = of_alias_get_id(dev->of_node, "i2c");
2100 if (id >= 0) {
2101 adapter->nr = id;
2102 return __i2c_add_numbered_adapter(adapter);
2103 }
2104 }
2105
Jean Delvarecaada322008-01-27 18:14:49 +01002106 mutex_lock(&core_lock);
Tejun Heo4ae42b02013-02-27 17:04:15 -08002107 id = idr_alloc(&i2c_adapter_idr, adapter,
2108 __i2c_first_dynamic_bus_num, 0, GFP_KERNEL);
Jean Delvarecaada322008-01-27 18:14:49 +01002109 mutex_unlock(&core_lock);
Wolfram Sang84d0b612016-07-09 13:35:01 +09002110 if (WARN(id < 0, "couldn't get idr"))
Tejun Heo4ae42b02013-02-27 17:04:15 -08002111 return id;
David Brownell6e13e642007-05-01 23:26:31 +02002112
2113 adapter->nr = id;
Tejun Heo4ae42b02013-02-27 17:04:15 -08002114
David Brownell6e13e642007-05-01 23:26:31 +02002115 return i2c_register_adapter(adapter);
2116}
2117EXPORT_SYMBOL(i2c_add_adapter);
2118
2119/**
2120 * i2c_add_numbered_adapter - declare i2c adapter, use static bus number
2121 * @adap: the adapter to register (with adap->nr initialized)
David Brownelld64f73b2007-07-12 14:12:28 +02002122 * Context: can sleep
David Brownell6e13e642007-05-01 23:26:31 +02002123 *
2124 * This routine is used to declare an I2C adapter when its bus number
Randy Dunlap8c07e462008-03-23 20:28:20 +01002125 * matters. For example, use it for I2C adapters from system-on-chip CPUs,
2126 * or otherwise built in to the system's mainboard, and where i2c_board_info
David Brownell6e13e642007-05-01 23:26:31 +02002127 * is used to properly configure I2C devices.
2128 *
Grant Likely488bf312011-07-25 17:49:43 +02002129 * If the requested bus number is set to -1, then this function will behave
2130 * identically to i2c_add_adapter, and will dynamically assign a bus number.
2131 *
David Brownell6e13e642007-05-01 23:26:31 +02002132 * If no devices have pre-been declared for this bus, then be sure to
2133 * register the adapter before any dynamically allocated ones. Otherwise
2134 * the required bus ID may not be available.
2135 *
2136 * When this returns zero, the specified adapter became available for
2137 * clients using the bus number provided in adap->nr. Also, the table
2138 * of I2C devices pre-declared using i2c_register_board_info() is scanned,
2139 * and the appropriate driver model device nodes are created. Otherwise, a
2140 * negative errno value is returned.
2141 */
2142int i2c_add_numbered_adapter(struct i2c_adapter *adap)
2143{
Grant Likely488bf312011-07-25 17:49:43 +02002144 if (adap->nr == -1) /* -1 means dynamically assign bus id */
2145 return i2c_add_adapter(adap);
David Brownell6e13e642007-05-01 23:26:31 +02002146
Doug Andersonee5c2742013-03-01 08:57:31 -08002147 return __i2c_add_numbered_adapter(adap);
David Brownell6e13e642007-05-01 23:26:31 +02002148}
2149EXPORT_SYMBOL_GPL(i2c_add_numbered_adapter);
2150
Lars-Peter Clausen19baba42013-03-09 08:16:44 +00002151static void i2c_do_del_adapter(struct i2c_driver *driver,
Jean Delvare69b00892009-12-06 17:06:27 +01002152 struct i2c_adapter *adapter)
Jean Delvare026526f2008-01-27 18:14:49 +01002153{
Jean Delvare4735c982008-07-14 22:38:36 +02002154 struct i2c_client *client, *_n;
Jean Delvare026526f2008-01-27 18:14:49 +01002155
Jean Delvareacec2112009-03-28 21:34:40 +01002156 /* Remove the devices we created ourselves as the result of hardware
2157 * probing (using a driver's detect method) */
Jean Delvare4735c982008-07-14 22:38:36 +02002158 list_for_each_entry_safe(client, _n, &driver->clients, detected) {
2159 if (client->adapter == adapter) {
2160 dev_dbg(&adapter->dev, "Removing %s at 0x%x\n",
2161 client->name, client->addr);
2162 list_del(&client->detected);
2163 i2c_unregister_device(client);
2164 }
2165 }
Jean Delvare026526f2008-01-27 18:14:49 +01002166}
2167
Jean Delvaree549c2b2009-06-19 16:58:19 +02002168static int __unregister_client(struct device *dev, void *dummy)
2169{
2170 struct i2c_client *client = i2c_verify_client(dev);
Jean Delvare5219bf82011-01-14 22:03:49 +01002171 if (client && strcmp(client->name, "dummy"))
2172 i2c_unregister_device(client);
2173 return 0;
2174}
2175
2176static int __unregister_dummy(struct device *dev, void *dummy)
2177{
2178 struct i2c_client *client = i2c_verify_client(dev);
Jean Delvaree549c2b2009-06-19 16:58:19 +02002179 if (client)
2180 i2c_unregister_device(client);
2181 return 0;
2182}
2183
Jean Delvare69b00892009-12-06 17:06:27 +01002184static int __process_removed_adapter(struct device_driver *d, void *data)
2185{
Lars-Peter Clausen19baba42013-03-09 08:16:44 +00002186 i2c_do_del_adapter(to_i2c_driver(d), data);
2187 return 0;
Jean Delvare69b00892009-12-06 17:06:27 +01002188}
2189
David Brownelld64f73b2007-07-12 14:12:28 +02002190/**
2191 * i2c_del_adapter - unregister I2C adapter
2192 * @adap: the adapter being unregistered
2193 * Context: can sleep
2194 *
2195 * This unregisters an I2C adapter which was previously registered
2196 * by @i2c_add_adapter or @i2c_add_numbered_adapter.
2197 */
Lars-Peter Clausen71546302013-03-09 08:16:47 +00002198void i2c_del_adapter(struct i2c_adapter *adap)
Linus Torvalds1da177e2005-04-16 15:20:36 -07002199{
Jean Delvare35fc37f2009-06-19 16:58:19 +02002200 struct i2c_adapter *found;
Jean Delvarebbd2d9c2009-11-26 09:22:33 +01002201 struct i2c_client *client, *next;
Linus Torvalds1da177e2005-04-16 15:20:36 -07002202
2203 /* First make sure that this adapter was ever added */
Jean Delvare35fc37f2009-06-19 16:58:19 +02002204 mutex_lock(&core_lock);
2205 found = idr_find(&i2c_adapter_idr, adap->nr);
2206 mutex_unlock(&core_lock);
2207 if (found != adap) {
Wolfram Sang44239a52016-07-09 13:35:04 +09002208 pr_debug("attempting to delete unregistered adapter [%s]\n", adap->name);
Lars-Peter Clausen71546302013-03-09 08:16:47 +00002209 return;
Linus Torvalds1da177e2005-04-16 15:20:36 -07002210 }
2211
Jarkko Nikulaaec809f2016-08-12 17:02:52 +03002212 i2c_acpi_remove_space_handler(adap);
Jean Delvare026526f2008-01-27 18:14:49 +01002213 /* Tell drivers about this removal */
Jean Delvare35fc37f2009-06-19 16:58:19 +02002214 mutex_lock(&core_lock);
Lars-Peter Clausen19baba42013-03-09 08:16:44 +00002215 bus_for_each_drv(&i2c_bus_type, NULL, adap,
Jean Delvare69b00892009-12-06 17:06:27 +01002216 __process_removed_adapter);
Jean Delvare35fc37f2009-06-19 16:58:19 +02002217 mutex_unlock(&core_lock);
Linus Torvalds1da177e2005-04-16 15:20:36 -07002218
Jean Delvarebbd2d9c2009-11-26 09:22:33 +01002219 /* Remove devices instantiated from sysfs */
Jean Delvare390946b2012-09-10 10:14:02 +02002220 mutex_lock_nested(&adap->userspace_clients_lock,
2221 i2c_adapter_depth(adap));
Jean Delvare6629dcf2010-05-04 11:09:28 +02002222 list_for_each_entry_safe(client, next, &adap->userspace_clients,
2223 detected) {
2224 dev_dbg(&adap->dev, "Removing %s at 0x%x\n", client->name,
2225 client->addr);
2226 list_del(&client->detected);
2227 i2c_unregister_device(client);
Jean Delvarebbd2d9c2009-11-26 09:22:33 +01002228 }
Jean Delvaredafc50d2010-08-11 18:21:01 +02002229 mutex_unlock(&adap->userspace_clients_lock);
Jean Delvarebbd2d9c2009-11-26 09:22:33 +01002230
Jean Delvaree549c2b2009-06-19 16:58:19 +02002231 /* Detach any active clients. This can't fail, thus we do not
Jean Delvare5219bf82011-01-14 22:03:49 +01002232 * check the returned value. This is a two-pass process, because
2233 * we can't remove the dummy devices during the first pass: they
2234 * could have been instantiated by real devices wishing to clean
2235 * them up properly, so we give them a chance to do that first. */
Lars-Peter Clausen19baba42013-03-09 08:16:44 +00002236 device_for_each_child(&adap->dev, NULL, __unregister_client);
2237 device_for_each_child(&adap->dev, NULL, __unregister_dummy);
Linus Torvalds1da177e2005-04-16 15:20:36 -07002238
Jean Delvare2bb50952009-09-18 22:45:46 +02002239#ifdef CONFIG_I2C_COMPAT
2240 class_compat_remove_link(i2c_adapter_compat_class, &adap->dev,
2241 adap->dev.parent);
2242#endif
2243
Thadeu Lima de Souza Cascardoc5567522010-01-16 20:43:13 +01002244 /* device name is gone after device_unregister */
2245 dev_dbg(&adap->dev, "adapter [%s] unregistered\n", adap->name);
2246
Wolfram Sang9f924162015-12-23 18:19:28 +01002247 pm_runtime_disable(&adap->dev);
2248
Benjamin Tissoires4d5538f2016-10-13 14:10:40 +02002249 i2c_host_notify_irq_teardown(adap);
2250
Wolfram Sang26680ee2015-01-29 22:45:09 +01002251 /* wait until all references to the device are gone
2252 *
2253 * FIXME: This is old code and should ideally be replaced by an
2254 * alternative which results in decoupling the lifetime of the struct
2255 * device from the i2c_adapter, like spi or netdev do. Any solution
Shailendra Verma95cc1e32015-05-18 22:24:01 +05302256 * should be thoroughly tested with DEBUG_KOBJECT_RELEASE enabled!
Wolfram Sang26680ee2015-01-29 22:45:09 +01002257 */
Linus Torvalds1da177e2005-04-16 15:20:36 -07002258 init_completion(&adap->dev_released);
Linus Torvalds1da177e2005-04-16 15:20:36 -07002259 device_unregister(&adap->dev);
Linus Torvalds1da177e2005-04-16 15:20:36 -07002260 wait_for_completion(&adap->dev_released);
Linus Torvalds1da177e2005-04-16 15:20:36 -07002261
David Brownell6e13e642007-05-01 23:26:31 +02002262 /* free bus id */
Jean Delvare35fc37f2009-06-19 16:58:19 +02002263 mutex_lock(&core_lock);
Linus Torvalds1da177e2005-04-16 15:20:36 -07002264 idr_remove(&i2c_adapter_idr, adap->nr);
Jean Delvare35fc37f2009-06-19 16:58:19 +02002265 mutex_unlock(&core_lock);
Linus Torvalds1da177e2005-04-16 15:20:36 -07002266
Jean Delvarebd4bc3db2008-07-16 19:30:05 +02002267 /* Clear the device structure in case this adapter is ever going to be
2268 added again */
2269 memset(&adap->dev, 0, sizeof(adap->dev));
Linus Torvalds1da177e2005-04-16 15:20:36 -07002270}
David Brownellc0564602007-05-01 23:26:31 +02002271EXPORT_SYMBOL(i2c_del_adapter);
Linus Torvalds1da177e2005-04-16 15:20:36 -07002272
Wolfram Sang54177cc2015-12-17 13:32:36 +01002273/**
2274 * i2c_parse_fw_timings - get I2C related timing parameters from firmware
2275 * @dev: The device to scan for I2C timing properties
2276 * @t: the i2c_timings struct to be filled with values
2277 * @use_defaults: bool to use sane defaults derived from the I2C specification
2278 * when properties are not found, otherwise use 0
2279 *
2280 * Scan the device for the generic I2C properties describing timing parameters
2281 * for the signal and fill the given struct with the results. If a property was
2282 * not found and use_defaults was true, then maximum timings are assumed which
2283 * are derived from the I2C specification. If use_defaults is not used, the
2284 * results will be 0, so drivers can apply their own defaults later. The latter
2285 * is mainly intended for avoiding regressions of existing drivers which want
2286 * to switch to this function. New drivers almost always should use the defaults.
2287 */
2288
2289void i2c_parse_fw_timings(struct device *dev, struct i2c_timings *t, bool use_defaults)
2290{
2291 int ret;
2292
2293 memset(t, 0, sizeof(*t));
2294
2295 ret = device_property_read_u32(dev, "clock-frequency", &t->bus_freq_hz);
2296 if (ret && use_defaults)
2297 t->bus_freq_hz = 100000;
2298
2299 ret = device_property_read_u32(dev, "i2c-scl-rising-time-ns", &t->scl_rise_ns);
2300 if (ret && use_defaults) {
2301 if (t->bus_freq_hz <= 100000)
2302 t->scl_rise_ns = 1000;
2303 else if (t->bus_freq_hz <= 400000)
2304 t->scl_rise_ns = 300;
2305 else
2306 t->scl_rise_ns = 120;
2307 }
2308
2309 ret = device_property_read_u32(dev, "i2c-scl-falling-time-ns", &t->scl_fall_ns);
2310 if (ret && use_defaults) {
2311 if (t->bus_freq_hz <= 400000)
2312 t->scl_fall_ns = 300;
2313 else
2314 t->scl_fall_ns = 120;
2315 }
2316
2317 device_property_read_u32(dev, "i2c-scl-internal-delay-ns", &t->scl_int_delay_ns);
2318
2319 ret = device_property_read_u32(dev, "i2c-sda-falling-time-ns", &t->sda_fall_ns);
2320 if (ret && use_defaults)
2321 t->sda_fall_ns = t->scl_fall_ns;
2322}
2323EXPORT_SYMBOL_GPL(i2c_parse_fw_timings);
2324
David Brownell7b4fbc52007-05-01 23:26:30 +02002325/* ------------------------------------------------------------------------- */
2326
Jean Delvare7ae31482011-03-20 14:50:52 +01002327int i2c_for_each_dev(void *data, int (*fn)(struct device *, void *))
2328{
2329 int res;
2330
2331 mutex_lock(&core_lock);
2332 res = bus_for_each_dev(&i2c_bus_type, NULL, data, fn);
2333 mutex_unlock(&core_lock);
2334
2335 return res;
2336}
2337EXPORT_SYMBOL_GPL(i2c_for_each_dev);
2338
Jean Delvare69b00892009-12-06 17:06:27 +01002339static int __process_new_driver(struct device *dev, void *data)
Dave Young7f101a92008-07-14 22:38:19 +02002340{
Jean Delvare4f8cf822009-09-18 22:45:46 +02002341 if (dev->type != &i2c_adapter_type)
2342 return 0;
Jean Delvare69b00892009-12-06 17:06:27 +01002343 return i2c_do_add_adapter(data, to_i2c_adapter(dev));
Dave Young7f101a92008-07-14 22:38:19 +02002344}
2345
David Brownell7b4fbc52007-05-01 23:26:30 +02002346/*
2347 * An i2c_driver is used with one or more i2c_client (device) nodes to access
Jean Delvare729d6dd2009-06-19 16:58:18 +02002348 * i2c slave chips, on a bus instance associated with some i2c_adapter.
Linus Torvalds1da177e2005-04-16 15:20:36 -07002349 */
2350
Greg Kroah-Hartmande59cf92005-12-06 15:33:15 -08002351int i2c_register_driver(struct module *owner, struct i2c_driver *driver)
Linus Torvalds1da177e2005-04-16 15:20:36 -07002352{
Jean Delvare7eebcb72006-02-05 23:28:21 +01002353 int res;
Linus Torvalds1da177e2005-04-16 15:20:36 -07002354
David Brownell1d0b19c2008-10-14 17:30:05 +02002355 /* Can't register until after driver model init */
Sudip Mukherjee95026652016-03-07 17:19:17 +05302356 if (WARN_ON(!is_registered))
David Brownell1d0b19c2008-10-14 17:30:05 +02002357 return -EAGAIN;
2358
Linus Torvalds1da177e2005-04-16 15:20:36 -07002359 /* add the driver to the list of i2c drivers in the driver core */
Greg Kroah-Hartmande59cf92005-12-06 15:33:15 -08002360 driver->driver.owner = owner;
Linus Torvalds1da177e2005-04-16 15:20:36 -07002361 driver->driver.bus = &i2c_bus_type;
Vladimir Zapolskiy147b36d2016-10-31 21:46:24 +02002362 INIT_LIST_HEAD(&driver->clients);
Linus Torvalds1da177e2005-04-16 15:20:36 -07002363
Jean Delvare729d6dd2009-06-19 16:58:18 +02002364 /* When registration returns, the driver core
David Brownell6e13e642007-05-01 23:26:31 +02002365 * will have called probe() for all matching-but-unbound devices.
2366 */
Linus Torvalds1da177e2005-04-16 15:20:36 -07002367 res = driver_register(&driver->driver);
2368 if (res)
Jean Delvare7eebcb72006-02-05 23:28:21 +01002369 return res;
David Brownell438d6c22006-12-10 21:21:31 +01002370
Wolfram Sang44239a52016-07-09 13:35:04 +09002371 pr_debug("driver [%s] registered\n", driver->driver.name);
Linus Torvalds1da177e2005-04-16 15:20:36 -07002372
Jean Delvare4735c982008-07-14 22:38:36 +02002373 /* Walk the adapters that are already present */
Jean Delvare7ae31482011-03-20 14:50:52 +01002374 i2c_for_each_dev(driver, __process_new_driver);
Jean Delvare35fc37f2009-06-19 16:58:19 +02002375
Jean Delvare7eebcb72006-02-05 23:28:21 +01002376 return 0;
Linus Torvalds1da177e2005-04-16 15:20:36 -07002377}
Greg Kroah-Hartmande59cf92005-12-06 15:33:15 -08002378EXPORT_SYMBOL(i2c_register_driver);
Linus Torvalds1da177e2005-04-16 15:20:36 -07002379
Jean Delvare69b00892009-12-06 17:06:27 +01002380static int __process_removed_driver(struct device *dev, void *data)
Dave Young7f101a92008-07-14 22:38:19 +02002381{
Lars-Peter Clausen19baba42013-03-09 08:16:44 +00002382 if (dev->type == &i2c_adapter_type)
2383 i2c_do_del_adapter(data, to_i2c_adapter(dev));
2384 return 0;
Dave Young7f101a92008-07-14 22:38:19 +02002385}
2386
David Brownella1d9e6e2007-05-01 23:26:30 +02002387/**
2388 * i2c_del_driver - unregister I2C driver
2389 * @driver: the driver being unregistered
David Brownelld64f73b2007-07-12 14:12:28 +02002390 * Context: can sleep
David Brownella1d9e6e2007-05-01 23:26:30 +02002391 */
Jean Delvareb3e82092007-05-01 23:26:32 +02002392void i2c_del_driver(struct i2c_driver *driver)
Linus Torvalds1da177e2005-04-16 15:20:36 -07002393{
Jean Delvare7ae31482011-03-20 14:50:52 +01002394 i2c_for_each_dev(driver, __process_removed_driver);
David Brownella1d9e6e2007-05-01 23:26:30 +02002395
Linus Torvalds1da177e2005-04-16 15:20:36 -07002396 driver_unregister(&driver->driver);
Wolfram Sang44239a52016-07-09 13:35:04 +09002397 pr_debug("driver [%s] unregistered\n", driver->driver.name);
Linus Torvalds1da177e2005-04-16 15:20:36 -07002398}
David Brownellc0564602007-05-01 23:26:31 +02002399EXPORT_SYMBOL(i2c_del_driver);
Linus Torvalds1da177e2005-04-16 15:20:36 -07002400
David Brownell7b4fbc52007-05-01 23:26:30 +02002401/* ------------------------------------------------------------------------- */
2402
Jean Delvaree48d3312008-01-27 18:14:48 +01002403/**
2404 * i2c_use_client - increments the reference count of the i2c client structure
2405 * @client: the client being referenced
2406 *
2407 * Each live reference to a client should be refcounted. The driver model does
2408 * that automatically as part of driver binding, so that most drivers don't
2409 * need to do this explicitly: they hold a reference until they're unbound
2410 * from the device.
2411 *
2412 * A pointer to the client with the incremented reference counter is returned.
2413 */
2414struct i2c_client *i2c_use_client(struct i2c_client *client)
Linus Torvalds1da177e2005-04-16 15:20:36 -07002415{
David Brownell6ea438e2008-07-14 22:38:24 +02002416 if (client && get_device(&client->dev))
2417 return client;
2418 return NULL;
Linus Torvalds1da177e2005-04-16 15:20:36 -07002419}
David Brownellc0564602007-05-01 23:26:31 +02002420EXPORT_SYMBOL(i2c_use_client);
Linus Torvalds1da177e2005-04-16 15:20:36 -07002421
Jean Delvaree48d3312008-01-27 18:14:48 +01002422/**
2423 * i2c_release_client - release a use of the i2c client structure
2424 * @client: the client being no longer referenced
2425 *
2426 * Must be called when a user of a client is finished with it.
2427 */
2428void i2c_release_client(struct i2c_client *client)
Linus Torvalds1da177e2005-04-16 15:20:36 -07002429{
David Brownell6ea438e2008-07-14 22:38:24 +02002430 if (client)
2431 put_device(&client->dev);
Linus Torvalds1da177e2005-04-16 15:20:36 -07002432}
David Brownellc0564602007-05-01 23:26:31 +02002433EXPORT_SYMBOL(i2c_release_client);
Linus Torvalds1da177e2005-04-16 15:20:36 -07002434
David Brownell9b766b82008-01-27 18:14:51 +01002435struct i2c_cmd_arg {
2436 unsigned cmd;
2437 void *arg;
2438};
2439
2440static int i2c_cmd(struct device *dev, void *_arg)
2441{
2442 struct i2c_client *client = i2c_verify_client(dev);
2443 struct i2c_cmd_arg *arg = _arg;
Lars-Peter Clausen0acc2b32013-09-29 10:51:06 +02002444 struct i2c_driver *driver;
David Brownell9b766b82008-01-27 18:14:51 +01002445
Lars-Peter Clausen0acc2b32013-09-29 10:51:06 +02002446 if (!client || !client->dev.driver)
2447 return 0;
2448
2449 driver = to_i2c_driver(client->dev.driver);
2450 if (driver->command)
2451 driver->command(client, arg->cmd, arg->arg);
David Brownell9b766b82008-01-27 18:14:51 +01002452 return 0;
2453}
2454
Linus Torvalds1da177e2005-04-16 15:20:36 -07002455void i2c_clients_command(struct i2c_adapter *adap, unsigned int cmd, void *arg)
2456{
David Brownell9b766b82008-01-27 18:14:51 +01002457 struct i2c_cmd_arg cmd_arg;
Linus Torvalds1da177e2005-04-16 15:20:36 -07002458
David Brownell9b766b82008-01-27 18:14:51 +01002459 cmd_arg.cmd = cmd;
2460 cmd_arg.arg = arg;
2461 device_for_each_child(&adap->dev, &cmd_arg, i2c_cmd);
Linus Torvalds1da177e2005-04-16 15:20:36 -07002462}
David Brownellc0564602007-05-01 23:26:31 +02002463EXPORT_SYMBOL(i2c_clients_command);
Linus Torvalds1da177e2005-04-16 15:20:36 -07002464
Pantelis Antoniouea7513b2014-10-28 22:36:03 +02002465#if IS_ENABLED(CONFIG_OF_DYNAMIC)
2466static int of_i2c_notify(struct notifier_block *nb, unsigned long action,
2467 void *arg)
2468{
2469 struct of_reconfig_data *rd = arg;
2470 struct i2c_adapter *adap;
2471 struct i2c_client *client;
2472
2473 switch (of_reconfig_get_state_change(action, rd)) {
2474 case OF_RECONFIG_CHANGE_ADD:
2475 adap = of_find_i2c_adapter_by_node(rd->dn->parent);
2476 if (adap == NULL)
2477 return NOTIFY_OK; /* not for us */
2478
Pantelis Antoniou4f001fd2015-01-24 09:16:29 +02002479 if (of_node_test_and_set_flag(rd->dn, OF_POPULATED)) {
2480 put_device(&adap->dev);
2481 return NOTIFY_OK;
2482 }
2483
Pantelis Antoniouea7513b2014-10-28 22:36:03 +02002484 client = of_i2c_register_device(adap, rd->dn);
2485 put_device(&adap->dev);
2486
2487 if (IS_ERR(client)) {
Wolfram Sang399d62a2016-07-09 13:35:02 +09002488 dev_err(&adap->dev, "failed to create client for '%s'\n",
2489 rd->dn->full_name);
Ralf Ramsauer6a676fb2016-10-17 15:59:57 +02002490 of_node_clear_flag(rd->dn, OF_POPULATED);
Pantelis Antoniouea7513b2014-10-28 22:36:03 +02002491 return notifier_from_errno(PTR_ERR(client));
2492 }
2493 break;
2494 case OF_RECONFIG_CHANGE_REMOVE:
Pantelis Antoniou4f001fd2015-01-24 09:16:29 +02002495 /* already depopulated? */
2496 if (!of_node_check_flag(rd->dn, OF_POPULATED))
2497 return NOTIFY_OK;
2498
Pantelis Antoniouea7513b2014-10-28 22:36:03 +02002499 /* find our device by node */
2500 client = of_find_i2c_device_by_node(rd->dn);
2501 if (client == NULL)
2502 return NOTIFY_OK; /* no? not meant for us */
2503
2504 /* unregister takes one ref away */
2505 i2c_unregister_device(client);
2506
2507 /* and put the reference of the find */
2508 put_device(&client->dev);
2509 break;
2510 }
2511
2512 return NOTIFY_OK;
2513}
2514static struct notifier_block i2c_of_notifier = {
2515 .notifier_call = of_i2c_notify,
2516};
2517#else
2518extern struct notifier_block i2c_of_notifier;
2519#endif /* CONFIG_OF_DYNAMIC */
2520
Linus Torvalds1da177e2005-04-16 15:20:36 -07002521static int __init i2c_init(void)
2522{
2523 int retval;
2524
Wolfram Sang03bde7c2015-03-12 17:17:59 +01002525 retval = of_alias_get_highest_id("i2c");
2526
2527 down_write(&__i2c_board_lock);
2528 if (retval >= __i2c_first_dynamic_bus_num)
2529 __i2c_first_dynamic_bus_num = retval + 1;
2530 up_write(&__i2c_board_lock);
2531
Linus Torvalds1da177e2005-04-16 15:20:36 -07002532 retval = bus_register(&i2c_bus_type);
2533 if (retval)
2534 return retval;
Wolfram Sangb980a262016-03-14 10:41:52 +01002535
2536 is_registered = true;
2537
Jean Delvare2bb50952009-09-18 22:45:46 +02002538#ifdef CONFIG_I2C_COMPAT
2539 i2c_adapter_compat_class = class_compat_register("i2c-adapter");
2540 if (!i2c_adapter_compat_class) {
2541 retval = -ENOMEM;
2542 goto bus_err;
2543 }
2544#endif
David Brownelle9f13732008-01-27 18:14:52 +01002545 retval = i2c_add_driver(&dummy_driver);
2546 if (retval)
Jean Delvare2bb50952009-09-18 22:45:46 +02002547 goto class_err;
Pantelis Antoniouea7513b2014-10-28 22:36:03 +02002548
2549 if (IS_ENABLED(CONFIG_OF_DYNAMIC))
2550 WARN_ON(of_reconfig_notifier_register(&i2c_of_notifier));
Octavian Purdila525e6fa2016-07-08 19:13:10 +03002551 if (IS_ENABLED(CONFIG_ACPI))
2552 WARN_ON(acpi_reconfig_notifier_register(&i2c_acpi_notifier));
Pantelis Antoniouea7513b2014-10-28 22:36:03 +02002553
David Brownelle9f13732008-01-27 18:14:52 +01002554 return 0;
2555
Jean Delvare2bb50952009-09-18 22:45:46 +02002556class_err:
2557#ifdef CONFIG_I2C_COMPAT
2558 class_compat_unregister(i2c_adapter_compat_class);
David Brownelle9f13732008-01-27 18:14:52 +01002559bus_err:
Jean Delvare2bb50952009-09-18 22:45:46 +02002560#endif
Wolfram Sangb980a262016-03-14 10:41:52 +01002561 is_registered = false;
David Brownelle9f13732008-01-27 18:14:52 +01002562 bus_unregister(&i2c_bus_type);
2563 return retval;
Linus Torvalds1da177e2005-04-16 15:20:36 -07002564}
2565
2566static void __exit i2c_exit(void)
2567{
Octavian Purdila525e6fa2016-07-08 19:13:10 +03002568 if (IS_ENABLED(CONFIG_ACPI))
2569 WARN_ON(acpi_reconfig_notifier_unregister(&i2c_acpi_notifier));
Pantelis Antoniouea7513b2014-10-28 22:36:03 +02002570 if (IS_ENABLED(CONFIG_OF_DYNAMIC))
2571 WARN_ON(of_reconfig_notifier_unregister(&i2c_of_notifier));
David Brownelle9f13732008-01-27 18:14:52 +01002572 i2c_del_driver(&dummy_driver);
Jean Delvare2bb50952009-09-18 22:45:46 +02002573#ifdef CONFIG_I2C_COMPAT
2574 class_compat_unregister(i2c_adapter_compat_class);
2575#endif
Linus Torvalds1da177e2005-04-16 15:20:36 -07002576 bus_unregister(&i2c_bus_type);
David Howellsd9a83d62014-03-06 13:35:59 +00002577 tracepoint_synchronize_unregister();
Linus Torvalds1da177e2005-04-16 15:20:36 -07002578}
2579
David Brownella10f9e72008-10-14 17:30:06 +02002580/* We must initialize early, because some subsystems register i2c drivers
2581 * in subsys_initcall() code, but are linked (and initialized) before i2c.
2582 */
2583postcore_initcall(i2c_init);
Linus Torvalds1da177e2005-04-16 15:20:36 -07002584module_exit(i2c_exit);
2585
2586/* ----------------------------------------------------
2587 * the functional interface to the i2c busses.
2588 * ----------------------------------------------------
2589 */
2590
Wolfram Sangb7f62582015-01-05 23:45:59 +01002591/* Check if val is exceeding the quirk IFF quirk is non 0 */
2592#define i2c_quirk_exceeded(val, quirk) ((quirk) && ((val) > (quirk)))
2593
2594static int i2c_quirk_error(struct i2c_adapter *adap, struct i2c_msg *msg, char *err_msg)
2595{
2596 dev_err_ratelimited(&adap->dev, "adapter quirk: %s (addr 0x%04x, size %u, %s)\n",
2597 err_msg, msg->addr, msg->len,
2598 msg->flags & I2C_M_RD ? "read" : "write");
2599 return -EOPNOTSUPP;
2600}
2601
2602static int i2c_check_for_quirks(struct i2c_adapter *adap, struct i2c_msg *msgs, int num)
2603{
2604 const struct i2c_adapter_quirks *q = adap->quirks;
2605 int max_num = q->max_num_msgs, i;
2606 bool do_len_check = true;
2607
2608 if (q->flags & I2C_AQ_COMB) {
2609 max_num = 2;
2610
2611 /* special checks for combined messages */
2612 if (num == 2) {
2613 if (q->flags & I2C_AQ_COMB_WRITE_FIRST && msgs[0].flags & I2C_M_RD)
2614 return i2c_quirk_error(adap, &msgs[0], "1st comb msg must be write");
2615
2616 if (q->flags & I2C_AQ_COMB_READ_SECOND && !(msgs[1].flags & I2C_M_RD))
2617 return i2c_quirk_error(adap, &msgs[1], "2nd comb msg must be read");
2618
2619 if (q->flags & I2C_AQ_COMB_SAME_ADDR && msgs[0].addr != msgs[1].addr)
2620 return i2c_quirk_error(adap, &msgs[0], "comb msg only to same addr");
2621
2622 if (i2c_quirk_exceeded(msgs[0].len, q->max_comb_1st_msg_len))
2623 return i2c_quirk_error(adap, &msgs[0], "msg too long");
2624
2625 if (i2c_quirk_exceeded(msgs[1].len, q->max_comb_2nd_msg_len))
2626 return i2c_quirk_error(adap, &msgs[1], "msg too long");
2627
2628 do_len_check = false;
2629 }
2630 }
2631
2632 if (i2c_quirk_exceeded(num, max_num))
2633 return i2c_quirk_error(adap, &msgs[0], "too many messages");
2634
2635 for (i = 0; i < num; i++) {
2636 u16 len = msgs[i].len;
2637
2638 if (msgs[i].flags & I2C_M_RD) {
2639 if (do_len_check && i2c_quirk_exceeded(len, q->max_read_len))
2640 return i2c_quirk_error(adap, &msgs[i], "msg too long");
2641 } else {
2642 if (do_len_check && i2c_quirk_exceeded(len, q->max_write_len))
2643 return i2c_quirk_error(adap, &msgs[i], "msg too long");
2644 }
2645 }
2646
2647 return 0;
2648}
2649
David Brownella1cdeda2008-07-14 22:38:24 +02002650/**
Jean Delvareb37d2a32012-06-29 07:47:19 -03002651 * __i2c_transfer - unlocked flavor of i2c_transfer
2652 * @adap: Handle to I2C bus
2653 * @msgs: One or more messages to execute before STOP is issued to
2654 * terminate the operation; each message begins with a START.
2655 * @num: Number of messages to be executed.
2656 *
2657 * Returns negative errno, else the number of messages executed.
2658 *
2659 * Adapter lock must be held when calling this function. No debug logging
2660 * takes place. adap->algo->master_xfer existence isn't checked.
2661 */
2662int __i2c_transfer(struct i2c_adapter *adap, struct i2c_msg *msgs, int num)
2663{
2664 unsigned long orig_jiffies;
2665 int ret, try;
2666
Wolfram Sangb7f62582015-01-05 23:45:59 +01002667 if (adap->quirks && i2c_check_for_quirks(adap, msgs, num))
2668 return -EOPNOTSUPP;
2669
David Howellsd9a83d62014-03-06 13:35:59 +00002670 /* i2c_trace_msg gets enabled when tracepoint i2c_transfer gets
2671 * enabled. This is an efficient way of keeping the for-loop from
2672 * being executed when not needed.
2673 */
2674 if (static_key_false(&i2c_trace_msg)) {
2675 int i;
2676 for (i = 0; i < num; i++)
2677 if (msgs[i].flags & I2C_M_RD)
2678 trace_i2c_read(adap, &msgs[i], i);
2679 else
2680 trace_i2c_write(adap, &msgs[i], i);
2681 }
2682
Jean Delvareb37d2a32012-06-29 07:47:19 -03002683 /* Retry automatically on arbitration loss */
2684 orig_jiffies = jiffies;
2685 for (ret = 0, try = 0; try <= adap->retries; try++) {
2686 ret = adap->algo->master_xfer(adap, msgs, num);
2687 if (ret != -EAGAIN)
2688 break;
2689 if (time_after(jiffies, orig_jiffies + adap->timeout))
2690 break;
2691 }
2692
David Howellsd9a83d62014-03-06 13:35:59 +00002693 if (static_key_false(&i2c_trace_msg)) {
2694 int i;
2695 for (i = 0; i < ret; i++)
2696 if (msgs[i].flags & I2C_M_RD)
2697 trace_i2c_reply(adap, &msgs[i], i);
2698 trace_i2c_result(adap, i, ret);
2699 }
2700
Jean Delvareb37d2a32012-06-29 07:47:19 -03002701 return ret;
2702}
2703EXPORT_SYMBOL(__i2c_transfer);
2704
2705/**
David Brownella1cdeda2008-07-14 22:38:24 +02002706 * i2c_transfer - execute a single or combined I2C message
2707 * @adap: Handle to I2C bus
2708 * @msgs: One or more messages to execute before STOP is issued to
2709 * terminate the operation; each message begins with a START.
2710 * @num: Number of messages to be executed.
2711 *
2712 * Returns negative errno, else the number of messages executed.
2713 *
2714 * Note that there is no requirement that each message be sent to
2715 * the same slave address, although that is the most common model.
2716 */
Zhenwen Xu09b8ce02009-03-28 21:34:46 +01002717int i2c_transfer(struct i2c_adapter *adap, struct i2c_msg *msgs, int num)
Linus Torvalds1da177e2005-04-16 15:20:36 -07002718{
Jean Delvareb37d2a32012-06-29 07:47:19 -03002719 int ret;
Linus Torvalds1da177e2005-04-16 15:20:36 -07002720
David Brownella1cdeda2008-07-14 22:38:24 +02002721 /* REVISIT the fault reporting model here is weak:
2722 *
2723 * - When we get an error after receiving N bytes from a slave,
2724 * there is no way to report "N".
2725 *
2726 * - When we get a NAK after transmitting N bytes to a slave,
2727 * there is no way to report "N" ... or to let the master
2728 * continue executing the rest of this combined message, if
2729 * that's the appropriate response.
2730 *
2731 * - When for example "num" is two and we successfully complete
2732 * the first message but get an error part way through the
2733 * second, it's unclear whether that should be reported as
2734 * one (discarding status on the second message) or errno
2735 * (discarding status on the first one).
2736 */
2737
Linus Torvalds1da177e2005-04-16 15:20:36 -07002738 if (adap->algo->master_xfer) {
2739#ifdef DEBUG
2740 for (ret = 0; ret < num; ret++) {
Andy Shevchenkob93d3d32016-08-25 17:42:10 +03002741 dev_dbg(&adap->dev,
2742 "master_xfer[%d] %c, addr=0x%02x, len=%d%s\n",
2743 ret, (msgs[ret].flags & I2C_M_RD) ? 'R' : 'W',
2744 msgs[ret].addr, msgs[ret].len,
Jean Delvare209d27c2007-05-01 23:26:29 +02002745 (msgs[ret].flags & I2C_M_RECV_LEN) ? "+" : "");
Linus Torvalds1da177e2005-04-16 15:20:36 -07002746 }
2747#endif
2748
Mike Rapoportcea443a82008-01-27 18:14:50 +01002749 if (in_atomic() || irqs_disabled()) {
Peter Rosinfb79e092016-06-29 15:04:03 +02002750 ret = i2c_trylock_bus(adap, I2C_LOCK_SEGMENT);
Mike Rapoportcea443a82008-01-27 18:14:50 +01002751 if (!ret)
2752 /* I2C activity is ongoing. */
2753 return -EAGAIN;
2754 } else {
Peter Rosin8320f492016-05-04 22:15:27 +02002755 i2c_lock_bus(adap, I2C_LOCK_SEGMENT);
Mike Rapoportcea443a82008-01-27 18:14:50 +01002756 }
2757
Jean Delvareb37d2a32012-06-29 07:47:19 -03002758 ret = __i2c_transfer(adap, msgs, num);
Peter Rosin8320f492016-05-04 22:15:27 +02002759 i2c_unlock_bus(adap, I2C_LOCK_SEGMENT);
Linus Torvalds1da177e2005-04-16 15:20:36 -07002760
2761 return ret;
2762 } else {
2763 dev_dbg(&adap->dev, "I2C level transfers not supported\n");
David Brownell24a5bb72008-07-14 22:38:23 +02002764 return -EOPNOTSUPP;
Linus Torvalds1da177e2005-04-16 15:20:36 -07002765 }
2766}
David Brownellc0564602007-05-01 23:26:31 +02002767EXPORT_SYMBOL(i2c_transfer);
Linus Torvalds1da177e2005-04-16 15:20:36 -07002768
David Brownella1cdeda2008-07-14 22:38:24 +02002769/**
2770 * i2c_master_send - issue a single I2C message in master transmit mode
2771 * @client: Handle to slave device
2772 * @buf: Data that will be written to the slave
Zhangfei Gao0c43ea52010-03-02 12:23:49 +01002773 * @count: How many bytes to write, must be less than 64k since msg.len is u16
David Brownella1cdeda2008-07-14 22:38:24 +02002774 *
2775 * Returns negative errno, or else the number of bytes written.
2776 */
Jean Delvare0cc43a12011-01-10 22:11:23 +01002777int i2c_master_send(const struct i2c_client *client, const char *buf, int count)
Linus Torvalds1da177e2005-04-16 15:20:36 -07002778{
2779 int ret;
Farid Hammane7225acf2010-05-21 18:40:58 +02002780 struct i2c_adapter *adap = client->adapter;
Linus Torvalds1da177e2005-04-16 15:20:36 -07002781 struct i2c_msg msg;
2782
Jean Delvare815f55f2005-05-07 22:58:46 +02002783 msg.addr = client->addr;
2784 msg.flags = client->flags & I2C_M_TEN;
2785 msg.len = count;
2786 msg.buf = (char *)buf;
David Brownell438d6c22006-12-10 21:21:31 +01002787
Jean Delvare815f55f2005-05-07 22:58:46 +02002788 ret = i2c_transfer(adap, &msg, 1);
Linus Torvalds1da177e2005-04-16 15:20:36 -07002789
Wolfram Sang834aa6f2012-03-15 18:11:05 +01002790 /*
2791 * If everything went ok (i.e. 1 msg transmitted), return #bytes
2792 * transmitted, else error code.
2793 */
Jean Delvare815f55f2005-05-07 22:58:46 +02002794 return (ret == 1) ? count : ret;
Linus Torvalds1da177e2005-04-16 15:20:36 -07002795}
David Brownellc0564602007-05-01 23:26:31 +02002796EXPORT_SYMBOL(i2c_master_send);
Linus Torvalds1da177e2005-04-16 15:20:36 -07002797
David Brownella1cdeda2008-07-14 22:38:24 +02002798/**
2799 * i2c_master_recv - issue a single I2C message in master receive mode
2800 * @client: Handle to slave device
2801 * @buf: Where to store data read from slave
Zhangfei Gao0c43ea52010-03-02 12:23:49 +01002802 * @count: How many bytes to read, must be less than 64k since msg.len is u16
David Brownella1cdeda2008-07-14 22:38:24 +02002803 *
2804 * Returns negative errno, or else the number of bytes read.
2805 */
Jean Delvare0cc43a12011-01-10 22:11:23 +01002806int i2c_master_recv(const struct i2c_client *client, char *buf, int count)
Linus Torvalds1da177e2005-04-16 15:20:36 -07002807{
Farid Hammane7225acf2010-05-21 18:40:58 +02002808 struct i2c_adapter *adap = client->adapter;
Linus Torvalds1da177e2005-04-16 15:20:36 -07002809 struct i2c_msg msg;
2810 int ret;
Linus Torvalds1da177e2005-04-16 15:20:36 -07002811
Jean Delvare815f55f2005-05-07 22:58:46 +02002812 msg.addr = client->addr;
2813 msg.flags = client->flags & I2C_M_TEN;
2814 msg.flags |= I2C_M_RD;
2815 msg.len = count;
2816 msg.buf = buf;
2817
2818 ret = i2c_transfer(adap, &msg, 1);
2819
Wolfram Sang834aa6f2012-03-15 18:11:05 +01002820 /*
2821 * If everything went ok (i.e. 1 msg received), return #bytes received,
2822 * else error code.
2823 */
Jean Delvare815f55f2005-05-07 22:58:46 +02002824 return (ret == 1) ? count : ret;
Linus Torvalds1da177e2005-04-16 15:20:36 -07002825}
David Brownellc0564602007-05-01 23:26:31 +02002826EXPORT_SYMBOL(i2c_master_recv);
Linus Torvalds1da177e2005-04-16 15:20:36 -07002827
Linus Torvalds1da177e2005-04-16 15:20:36 -07002828/* ----------------------------------------------------
2829 * the i2c address scanning function
2830 * Will not work for 10-bit addresses!
2831 * ----------------------------------------------------
2832 */
Jean Delvare9fc6adf2005-07-31 21:20:43 +02002833
Jean Delvare63e4e802010-06-03 11:33:51 +02002834/*
2835 * Legacy default probe function, mostly relevant for SMBus. The default
2836 * probe method is a quick write, but it is known to corrupt the 24RF08
2837 * EEPROMs due to a state machine bug, and could also irreversibly
2838 * write-protect some EEPROMs, so for address ranges 0x30-0x37 and 0x50-0x5f,
2839 * we use a short byte read instead. Also, some bus drivers don't implement
2840 * quick write, so we fallback to a byte read in that case too.
2841 * On x86, there is another special case for FSC hardware monitoring chips,
2842 * which want regular byte reads (address 0x73.) Fortunately, these are the
2843 * only known chips using this I2C address on PC hardware.
2844 * Returns 1 if probe succeeded, 0 if not.
2845 */
2846static int i2c_default_probe(struct i2c_adapter *adap, unsigned short addr)
2847{
2848 int err;
2849 union i2c_smbus_data dummy;
2850
2851#ifdef CONFIG_X86
2852 if (addr == 0x73 && (adap->class & I2C_CLASS_HWMON)
2853 && i2c_check_functionality(adap, I2C_FUNC_SMBUS_READ_BYTE_DATA))
2854 err = i2c_smbus_xfer(adap, addr, 0, I2C_SMBUS_READ, 0,
2855 I2C_SMBUS_BYTE_DATA, &dummy);
2856 else
2857#endif
Jean Delvare8031d792010-08-11 18:21:00 +02002858 if (!((addr & ~0x07) == 0x30 || (addr & ~0x0f) == 0x50)
2859 && i2c_check_functionality(adap, I2C_FUNC_SMBUS_QUICK))
Jean Delvare63e4e802010-06-03 11:33:51 +02002860 err = i2c_smbus_xfer(adap, addr, 0, I2C_SMBUS_WRITE, 0,
2861 I2C_SMBUS_QUICK, NULL);
Jean Delvare8031d792010-08-11 18:21:00 +02002862 else if (i2c_check_functionality(adap, I2C_FUNC_SMBUS_READ_BYTE))
2863 err = i2c_smbus_xfer(adap, addr, 0, I2C_SMBUS_READ, 0,
2864 I2C_SMBUS_BYTE, &dummy);
2865 else {
Andy Lutomirskid63a9e82013-07-17 13:27:59 -07002866 dev_warn(&adap->dev, "No suitable probing method supported for address 0x%02X\n",
2867 addr);
Jean Delvare8031d792010-08-11 18:21:00 +02002868 err = -EOPNOTSUPP;
2869 }
Jean Delvare63e4e802010-06-03 11:33:51 +02002870
2871 return err >= 0;
2872}
2873
Jean Delvareccfbbd02009-12-06 17:06:25 +01002874static int i2c_detect_address(struct i2c_client *temp_client,
Jean Delvare4735c982008-07-14 22:38:36 +02002875 struct i2c_driver *driver)
2876{
2877 struct i2c_board_info info;
2878 struct i2c_adapter *adapter = temp_client->adapter;
2879 int addr = temp_client->addr;
2880 int err;
2881
2882 /* Make sure the address is valid */
Wolfram Sang66be60562015-07-17 12:43:22 +02002883 err = i2c_check_7bit_addr_validity_strict(addr);
Jean Delvare656b8762010-06-03 11:33:53 +02002884 if (err) {
Jean Delvare4735c982008-07-14 22:38:36 +02002885 dev_warn(&adapter->dev, "Invalid probe address 0x%02x\n",
2886 addr);
Jean Delvare656b8762010-06-03 11:33:53 +02002887 return err;
Jean Delvare4735c982008-07-14 22:38:36 +02002888 }
2889
Wolfram Sang9bccc702015-07-17 14:48:56 +02002890 /* Skip if already in use (7 bit, no need to encode flags) */
Jean Delvare3b5f7942010-06-03 11:33:55 +02002891 if (i2c_check_addr_busy(adapter, addr))
Jean Delvare4735c982008-07-14 22:38:36 +02002892 return 0;
2893
Jean Delvareccfbbd02009-12-06 17:06:25 +01002894 /* Make sure there is something at this address */
Jean Delvare63e4e802010-06-03 11:33:51 +02002895 if (!i2c_default_probe(adapter, addr))
2896 return 0;
Jean Delvare4735c982008-07-14 22:38:36 +02002897
2898 /* Finally call the custom detection function */
2899 memset(&info, 0, sizeof(struct i2c_board_info));
2900 info.addr = addr;
Jean Delvare310ec792009-12-14 21:17:23 +01002901 err = driver->detect(temp_client, &info);
Jean Delvare4735c982008-07-14 22:38:36 +02002902 if (err) {
2903 /* -ENODEV is returned if the detection fails. We catch it
2904 here as this isn't an error. */
2905 return err == -ENODEV ? 0 : err;
2906 }
2907
2908 /* Consistency check */
2909 if (info.type[0] == '\0') {
Andy Shevchenkob93d3d32016-08-25 17:42:10 +03002910 dev_err(&adapter->dev,
2911 "%s detection function provided no name for 0x%x\n",
2912 driver->driver.name, addr);
Jean Delvare4735c982008-07-14 22:38:36 +02002913 } else {
2914 struct i2c_client *client;
2915
2916 /* Detection succeeded, instantiate the device */
Wolfram Sang0c176172014-02-10 11:03:56 +01002917 if (adapter->class & I2C_CLASS_DEPRECATED)
2918 dev_warn(&adapter->dev,
2919 "This adapter will soon drop class based instantiation of devices. "
2920 "Please make sure client 0x%02x gets instantiated by other means. "
2921 "Check 'Documentation/i2c/instantiating-devices' for details.\n",
2922 info.addr);
2923
Jean Delvare4735c982008-07-14 22:38:36 +02002924 dev_dbg(&adapter->dev, "Creating %s at 0x%02x\n",
2925 info.type, info.addr);
2926 client = i2c_new_device(adapter, &info);
2927 if (client)
2928 list_add_tail(&client->detected, &driver->clients);
2929 else
2930 dev_err(&adapter->dev, "Failed creating %s at 0x%02x\n",
2931 info.type, info.addr);
2932 }
2933 return 0;
2934}
2935
2936static int i2c_detect(struct i2c_adapter *adapter, struct i2c_driver *driver)
2937{
Jean Delvarec3813d62009-12-14 21:17:25 +01002938 const unsigned short *address_list;
Jean Delvare4735c982008-07-14 22:38:36 +02002939 struct i2c_client *temp_client;
2940 int i, err = 0;
2941 int adap_id = i2c_adapter_id(adapter);
2942
Jean Delvarec3813d62009-12-14 21:17:25 +01002943 address_list = driver->address_list;
2944 if (!driver->detect || !address_list)
Jean Delvare4735c982008-07-14 22:38:36 +02002945 return 0;
2946
Wolfram Sang45552272014-07-10 13:46:21 +02002947 /* Warn that the adapter lost class based instantiation */
2948 if (adapter->class == I2C_CLASS_DEPRECATED) {
2949 dev_dbg(&adapter->dev,
Andy Shevchenkob93d3d32016-08-25 17:42:10 +03002950 "This adapter dropped support for I2C classes and won't auto-detect %s devices anymore. "
2951 "If you need it, check 'Documentation/i2c/instantiating-devices' for alternatives.\n",
Wolfram Sang45552272014-07-10 13:46:21 +02002952 driver->driver.name);
2953 return 0;
2954 }
2955
Jean Delvare51b54ba2010-10-24 18:16:58 +02002956 /* Stop here if the classes do not match */
2957 if (!(adapter->class & driver->class))
2958 return 0;
2959
Jean Delvare4735c982008-07-14 22:38:36 +02002960 /* Set up a temporary client to help detect callback */
2961 temp_client = kzalloc(sizeof(struct i2c_client), GFP_KERNEL);
2962 if (!temp_client)
2963 return -ENOMEM;
2964 temp_client->adapter = adapter;
2965
Jean Delvarec3813d62009-12-14 21:17:25 +01002966 for (i = 0; address_list[i] != I2C_CLIENT_END; i += 1) {
Andy Shevchenkob93d3d32016-08-25 17:42:10 +03002967 dev_dbg(&adapter->dev,
2968 "found normal entry for adapter %d, addr 0x%02x\n",
2969 adap_id, address_list[i]);
Jean Delvarec3813d62009-12-14 21:17:25 +01002970 temp_client->addr = address_list[i];
Jean Delvareccfbbd02009-12-06 17:06:25 +01002971 err = i2c_detect_address(temp_client, driver);
Jean Delvare51b54ba2010-10-24 18:16:58 +02002972 if (unlikely(err))
2973 break;
Jean Delvare4735c982008-07-14 22:38:36 +02002974 }
2975
Jean Delvare4735c982008-07-14 22:38:36 +02002976 kfree(temp_client);
2977 return err;
2978}
2979
Jean Delvared44f19d2010-08-11 18:20:57 +02002980int i2c_probe_func_quick_read(struct i2c_adapter *adap, unsigned short addr)
2981{
2982 return i2c_smbus_xfer(adap, addr, 0, I2C_SMBUS_READ, 0,
2983 I2C_SMBUS_QUICK, NULL) >= 0;
2984}
2985EXPORT_SYMBOL_GPL(i2c_probe_func_quick_read);
2986
Jean Delvare12b5053a2007-05-01 23:26:31 +02002987struct i2c_client *
2988i2c_new_probed_device(struct i2c_adapter *adap,
2989 struct i2c_board_info *info,
Jean Delvare9a942412010-08-11 18:20:56 +02002990 unsigned short const *addr_list,
2991 int (*probe)(struct i2c_adapter *, unsigned short addr))
Jean Delvare12b5053a2007-05-01 23:26:31 +02002992{
2993 int i;
2994
Jean Delvare8031d792010-08-11 18:21:00 +02002995 if (!probe)
Jean Delvare9a942412010-08-11 18:20:56 +02002996 probe = i2c_default_probe;
Jean Delvare12b5053a2007-05-01 23:26:31 +02002997
Jean Delvare12b5053a2007-05-01 23:26:31 +02002998 for (i = 0; addr_list[i] != I2C_CLIENT_END; i++) {
2999 /* Check address validity */
Wolfram Sang66be60562015-07-17 12:43:22 +02003000 if (i2c_check_7bit_addr_validity_strict(addr_list[i]) < 0) {
Andy Shevchenkob93d3d32016-08-25 17:42:10 +03003001 dev_warn(&adap->dev, "Invalid 7-bit address 0x%02x\n",
3002 addr_list[i]);
Jean Delvare12b5053a2007-05-01 23:26:31 +02003003 continue;
3004 }
3005
Wolfram Sang9bccc702015-07-17 14:48:56 +02003006 /* Check address availability (7 bit, no need to encode flags) */
Jean Delvare3b5f7942010-06-03 11:33:55 +02003007 if (i2c_check_addr_busy(adap, addr_list[i])) {
Andy Shevchenkob93d3d32016-08-25 17:42:10 +03003008 dev_dbg(&adap->dev,
3009 "Address 0x%02x already in use, not probing\n",
3010 addr_list[i]);
Jean Delvare12b5053a2007-05-01 23:26:31 +02003011 continue;
3012 }
3013
Jean Delvare63e4e802010-06-03 11:33:51 +02003014 /* Test address responsiveness */
Jean Delvare9a942412010-08-11 18:20:56 +02003015 if (probe(adap, addr_list[i]))
Jean Delvare63e4e802010-06-03 11:33:51 +02003016 break;
Jean Delvare12b5053a2007-05-01 23:26:31 +02003017 }
Jean Delvare12b5053a2007-05-01 23:26:31 +02003018
3019 if (addr_list[i] == I2C_CLIENT_END) {
3020 dev_dbg(&adap->dev, "Probing failed, no device found\n");
3021 return NULL;
3022 }
3023
3024 info->addr = addr_list[i];
3025 return i2c_new_device(adap, info);
3026}
3027EXPORT_SYMBOL_GPL(i2c_new_probed_device);
3028
Jean Delvared735b342011-03-20 14:50:52 +01003029struct i2c_adapter *i2c_get_adapter(int nr)
Linus Torvalds1da177e2005-04-16 15:20:36 -07003030{
Linus Torvalds1da177e2005-04-16 15:20:36 -07003031 struct i2c_adapter *adapter;
David Brownell438d6c22006-12-10 21:21:31 +01003032
Jean Delvarecaada322008-01-27 18:14:49 +01003033 mutex_lock(&core_lock);
Jean Delvared735b342011-03-20 14:50:52 +01003034 adapter = idr_find(&i2c_adapter_idr, nr);
Vladimir Zapolskiy611e12e2015-07-27 17:30:49 +03003035 if (!adapter)
3036 goto exit;
3037
3038 if (try_module_get(adapter->owner))
3039 get_device(&adapter->dev);
3040 else
Mark M. Hoffmana0920e12005-06-28 00:21:30 -04003041 adapter = NULL;
3042
Vladimir Zapolskiy611e12e2015-07-27 17:30:49 +03003043 exit:
Jean Delvarecaada322008-01-27 18:14:49 +01003044 mutex_unlock(&core_lock);
Mark M. Hoffmana0920e12005-06-28 00:21:30 -04003045 return adapter;
Linus Torvalds1da177e2005-04-16 15:20:36 -07003046}
David Brownellc0564602007-05-01 23:26:31 +02003047EXPORT_SYMBOL(i2c_get_adapter);
Linus Torvalds1da177e2005-04-16 15:20:36 -07003048
3049void i2c_put_adapter(struct i2c_adapter *adap)
3050{
Vladimir Zapolskiy611e12e2015-07-27 17:30:49 +03003051 if (!adap)
3052 return;
3053
3054 put_device(&adap->dev);
3055 module_put(adap->owner);
Linus Torvalds1da177e2005-04-16 15:20:36 -07003056}
David Brownellc0564602007-05-01 23:26:31 +02003057EXPORT_SYMBOL(i2c_put_adapter);
Linus Torvalds1da177e2005-04-16 15:20:36 -07003058
3059/* The SMBus parts */
3060
David Brownell438d6c22006-12-10 21:21:31 +01003061#define POLY (0x1070U << 3)
Zhenwen Xu09b8ce02009-03-28 21:34:46 +01003062static u8 crc8(u16 data)
Linus Torvalds1da177e2005-04-16 15:20:36 -07003063{
3064 int i;
David Brownell438d6c22006-12-10 21:21:31 +01003065
Farid Hammane7225acf2010-05-21 18:40:58 +02003066 for (i = 0; i < 8; i++) {
David Brownell438d6c22006-12-10 21:21:31 +01003067 if (data & 0x8000)
Linus Torvalds1da177e2005-04-16 15:20:36 -07003068 data = data ^ POLY;
3069 data = data << 1;
3070 }
3071 return (u8)(data >> 8);
3072}
3073
Jean Delvare421ef472005-10-26 21:28:55 +02003074/* Incremental CRC8 over count bytes in the array pointed to by p */
3075static u8 i2c_smbus_pec(u8 crc, u8 *p, size_t count)
Linus Torvalds1da177e2005-04-16 15:20:36 -07003076{
3077 int i;
3078
Farid Hammane7225acf2010-05-21 18:40:58 +02003079 for (i = 0; i < count; i++)
Jean Delvare421ef472005-10-26 21:28:55 +02003080 crc = crc8((crc ^ p[i]) << 8);
Linus Torvalds1da177e2005-04-16 15:20:36 -07003081 return crc;
3082}
3083
Jean Delvare421ef472005-10-26 21:28:55 +02003084/* Assume a 7-bit address, which is reasonable for SMBus */
3085static u8 i2c_smbus_msg_pec(u8 pec, struct i2c_msg *msg)
Linus Torvalds1da177e2005-04-16 15:20:36 -07003086{
Jean Delvare421ef472005-10-26 21:28:55 +02003087 /* The address will be sent first */
Wolfram Sang041edda2016-04-03 20:44:46 +02003088 u8 addr = i2c_8bit_addr_from_msg(msg);
Jean Delvare421ef472005-10-26 21:28:55 +02003089 pec = i2c_smbus_pec(pec, &addr, 1);
3090
3091 /* The data buffer follows */
3092 return i2c_smbus_pec(pec, msg->buf, msg->len);
Linus Torvalds1da177e2005-04-16 15:20:36 -07003093}
3094
Jean Delvare421ef472005-10-26 21:28:55 +02003095/* Used for write only transactions */
3096static inline void i2c_smbus_add_pec(struct i2c_msg *msg)
Linus Torvalds1da177e2005-04-16 15:20:36 -07003097{
Jean Delvare421ef472005-10-26 21:28:55 +02003098 msg->buf[msg->len] = i2c_smbus_msg_pec(0, msg);
3099 msg->len++;
Linus Torvalds1da177e2005-04-16 15:20:36 -07003100}
3101
Jean Delvare421ef472005-10-26 21:28:55 +02003102/* Return <0 on CRC error
3103 If there was a write before this read (most cases) we need to take the
3104 partial CRC from the write part into account.
3105 Note that this function does modify the message (we need to decrease the
3106 message length to hide the CRC byte from the caller). */
3107static int i2c_smbus_check_pec(u8 cpec, struct i2c_msg *msg)
Linus Torvalds1da177e2005-04-16 15:20:36 -07003108{
Jean Delvare421ef472005-10-26 21:28:55 +02003109 u8 rpec = msg->buf[--msg->len];
3110 cpec = i2c_smbus_msg_pec(cpec, msg);
Linus Torvalds1da177e2005-04-16 15:20:36 -07003111
Linus Torvalds1da177e2005-04-16 15:20:36 -07003112 if (rpec != cpec) {
Wolfram Sang44239a52016-07-09 13:35:04 +09003113 pr_debug("Bad PEC 0x%02x vs. 0x%02x\n",
Linus Torvalds1da177e2005-04-16 15:20:36 -07003114 rpec, cpec);
David Brownell24a5bb72008-07-14 22:38:23 +02003115 return -EBADMSG;
Linus Torvalds1da177e2005-04-16 15:20:36 -07003116 }
David Brownell438d6c22006-12-10 21:21:31 +01003117 return 0;
Linus Torvalds1da177e2005-04-16 15:20:36 -07003118}
3119
David Brownella1cdeda2008-07-14 22:38:24 +02003120/**
3121 * i2c_smbus_read_byte - SMBus "receive byte" protocol
3122 * @client: Handle to slave device
3123 *
3124 * This executes the SMBus "receive byte" protocol, returning negative errno
3125 * else the byte received from the device.
3126 */
Jean Delvare0cc43a12011-01-10 22:11:23 +01003127s32 i2c_smbus_read_byte(const struct i2c_client *client)
Linus Torvalds1da177e2005-04-16 15:20:36 -07003128{
3129 union i2c_smbus_data data;
David Brownell24a5bb72008-07-14 22:38:23 +02003130 int status;
3131
3132 status = i2c_smbus_xfer(client->adapter, client->addr, client->flags,
3133 I2C_SMBUS_READ, 0,
3134 I2C_SMBUS_BYTE, &data);
3135 return (status < 0) ? status : data.byte;
Linus Torvalds1da177e2005-04-16 15:20:36 -07003136}
David Brownellc0564602007-05-01 23:26:31 +02003137EXPORT_SYMBOL(i2c_smbus_read_byte);
Linus Torvalds1da177e2005-04-16 15:20:36 -07003138
David Brownella1cdeda2008-07-14 22:38:24 +02003139/**
3140 * i2c_smbus_write_byte - SMBus "send byte" protocol
3141 * @client: Handle to slave device
3142 * @value: Byte to be sent
3143 *
3144 * This executes the SMBus "send byte" protocol, returning negative errno
3145 * else zero on success.
3146 */
Jean Delvare0cc43a12011-01-10 22:11:23 +01003147s32 i2c_smbus_write_byte(const struct i2c_client *client, u8 value)
Linus Torvalds1da177e2005-04-16 15:20:36 -07003148{
Farid Hammane7225acf2010-05-21 18:40:58 +02003149 return i2c_smbus_xfer(client->adapter, client->addr, client->flags,
Jean Delvare421ef472005-10-26 21:28:55 +02003150 I2C_SMBUS_WRITE, value, I2C_SMBUS_BYTE, NULL);
Linus Torvalds1da177e2005-04-16 15:20:36 -07003151}
David Brownellc0564602007-05-01 23:26:31 +02003152EXPORT_SYMBOL(i2c_smbus_write_byte);
Linus Torvalds1da177e2005-04-16 15:20:36 -07003153
David Brownella1cdeda2008-07-14 22:38:24 +02003154/**
3155 * i2c_smbus_read_byte_data - SMBus "read byte" protocol
3156 * @client: Handle to slave device
3157 * @command: Byte interpreted by slave
3158 *
3159 * This executes the SMBus "read byte" protocol, returning negative errno
3160 * else a data byte received from the device.
3161 */
Jean Delvare0cc43a12011-01-10 22:11:23 +01003162s32 i2c_smbus_read_byte_data(const struct i2c_client *client, u8 command)
Linus Torvalds1da177e2005-04-16 15:20:36 -07003163{
3164 union i2c_smbus_data data;
David Brownell24a5bb72008-07-14 22:38:23 +02003165 int status;
3166
3167 status = i2c_smbus_xfer(client->adapter, client->addr, client->flags,
3168 I2C_SMBUS_READ, command,
3169 I2C_SMBUS_BYTE_DATA, &data);
3170 return (status < 0) ? status : data.byte;
Linus Torvalds1da177e2005-04-16 15:20:36 -07003171}
David Brownellc0564602007-05-01 23:26:31 +02003172EXPORT_SYMBOL(i2c_smbus_read_byte_data);
Linus Torvalds1da177e2005-04-16 15:20:36 -07003173
David Brownella1cdeda2008-07-14 22:38:24 +02003174/**
3175 * i2c_smbus_write_byte_data - SMBus "write byte" protocol
3176 * @client: Handle to slave device
3177 * @command: Byte interpreted by slave
3178 * @value: Byte being written
3179 *
3180 * This executes the SMBus "write byte" protocol, returning negative errno
3181 * else zero on success.
3182 */
Jean Delvare0cc43a12011-01-10 22:11:23 +01003183s32 i2c_smbus_write_byte_data(const struct i2c_client *client, u8 command,
3184 u8 value)
Linus Torvalds1da177e2005-04-16 15:20:36 -07003185{
3186 union i2c_smbus_data data;
3187 data.byte = value;
Farid Hammane7225acf2010-05-21 18:40:58 +02003188 return i2c_smbus_xfer(client->adapter, client->addr, client->flags,
3189 I2C_SMBUS_WRITE, command,
3190 I2C_SMBUS_BYTE_DATA, &data);
Linus Torvalds1da177e2005-04-16 15:20:36 -07003191}
David Brownellc0564602007-05-01 23:26:31 +02003192EXPORT_SYMBOL(i2c_smbus_write_byte_data);
Linus Torvalds1da177e2005-04-16 15:20:36 -07003193
David Brownella1cdeda2008-07-14 22:38:24 +02003194/**
3195 * i2c_smbus_read_word_data - SMBus "read word" protocol
3196 * @client: Handle to slave device
3197 * @command: Byte interpreted by slave
3198 *
3199 * This executes the SMBus "read word" protocol, returning negative errno
3200 * else a 16-bit unsigned "word" received from the device.
3201 */
Jean Delvare0cc43a12011-01-10 22:11:23 +01003202s32 i2c_smbus_read_word_data(const struct i2c_client *client, u8 command)
Linus Torvalds1da177e2005-04-16 15:20:36 -07003203{
3204 union i2c_smbus_data data;
David Brownell24a5bb72008-07-14 22:38:23 +02003205 int status;
3206
3207 status = i2c_smbus_xfer(client->adapter, client->addr, client->flags,
3208 I2C_SMBUS_READ, command,
3209 I2C_SMBUS_WORD_DATA, &data);
3210 return (status < 0) ? status : data.word;
Linus Torvalds1da177e2005-04-16 15:20:36 -07003211}
David Brownellc0564602007-05-01 23:26:31 +02003212EXPORT_SYMBOL(i2c_smbus_read_word_data);
Linus Torvalds1da177e2005-04-16 15:20:36 -07003213
David Brownella1cdeda2008-07-14 22:38:24 +02003214/**
3215 * i2c_smbus_write_word_data - SMBus "write word" protocol
3216 * @client: Handle to slave device
3217 * @command: Byte interpreted by slave
3218 * @value: 16-bit "word" being written
3219 *
3220 * This executes the SMBus "write word" protocol, returning negative errno
3221 * else zero on success.
3222 */
Jean Delvare0cc43a12011-01-10 22:11:23 +01003223s32 i2c_smbus_write_word_data(const struct i2c_client *client, u8 command,
3224 u16 value)
Linus Torvalds1da177e2005-04-16 15:20:36 -07003225{
3226 union i2c_smbus_data data;
3227 data.word = value;
Farid Hammane7225acf2010-05-21 18:40:58 +02003228 return i2c_smbus_xfer(client->adapter, client->addr, client->flags,
3229 I2C_SMBUS_WRITE, command,
3230 I2C_SMBUS_WORD_DATA, &data);
Linus Torvalds1da177e2005-04-16 15:20:36 -07003231}
David Brownellc0564602007-05-01 23:26:31 +02003232EXPORT_SYMBOL(i2c_smbus_write_word_data);
Linus Torvalds1da177e2005-04-16 15:20:36 -07003233
David Brownella64ec072007-10-13 23:56:31 +02003234/**
David Brownella1cdeda2008-07-14 22:38:24 +02003235 * i2c_smbus_read_block_data - SMBus "block read" protocol
David Brownella64ec072007-10-13 23:56:31 +02003236 * @client: Handle to slave device
David Brownella1cdeda2008-07-14 22:38:24 +02003237 * @command: Byte interpreted by slave
David Brownella64ec072007-10-13 23:56:31 +02003238 * @values: Byte array into which data will be read; big enough to hold
3239 * the data returned by the slave. SMBus allows at most 32 bytes.
3240 *
David Brownella1cdeda2008-07-14 22:38:24 +02003241 * This executes the SMBus "block read" protocol, returning negative errno
3242 * else the number of data bytes in the slave's response.
David Brownella64ec072007-10-13 23:56:31 +02003243 *
3244 * Note that using this function requires that the client's adapter support
3245 * the I2C_FUNC_SMBUS_READ_BLOCK_DATA functionality. Not all adapter drivers
3246 * support this; its emulation through I2C messaging relies on a specific
3247 * mechanism (I2C_M_RECV_LEN) which may not be implemented.
3248 */
Jean Delvare0cc43a12011-01-10 22:11:23 +01003249s32 i2c_smbus_read_block_data(const struct i2c_client *client, u8 command,
Jean Delvareb86a1bc2007-05-01 23:26:34 +02003250 u8 *values)
3251{
3252 union i2c_smbus_data data;
David Brownell24a5bb72008-07-14 22:38:23 +02003253 int status;
Jean Delvareb86a1bc2007-05-01 23:26:34 +02003254
David Brownell24a5bb72008-07-14 22:38:23 +02003255 status = i2c_smbus_xfer(client->adapter, client->addr, client->flags,
3256 I2C_SMBUS_READ, command,
3257 I2C_SMBUS_BLOCK_DATA, &data);
3258 if (status)
3259 return status;
Jean Delvareb86a1bc2007-05-01 23:26:34 +02003260
3261 memcpy(values, &data.block[1], data.block[0]);
3262 return data.block[0];
3263}
3264EXPORT_SYMBOL(i2c_smbus_read_block_data);
3265
David Brownella1cdeda2008-07-14 22:38:24 +02003266/**
3267 * i2c_smbus_write_block_data - SMBus "block write" protocol
3268 * @client: Handle to slave device
3269 * @command: Byte interpreted by slave
3270 * @length: Size of data block; SMBus allows at most 32 bytes
3271 * @values: Byte array which will be written.
3272 *
3273 * This executes the SMBus "block write" protocol, returning negative errno
3274 * else zero on success.
3275 */
Jean Delvare0cc43a12011-01-10 22:11:23 +01003276s32 i2c_smbus_write_block_data(const struct i2c_client *client, u8 command,
Krzysztof Halasa46f5ed72006-06-12 21:42:20 +02003277 u8 length, const u8 *values)
Linus Torvalds1da177e2005-04-16 15:20:36 -07003278{
3279 union i2c_smbus_data data;
Jean Delvare76560322006-01-18 23:14:55 +01003280
Linus Torvalds1da177e2005-04-16 15:20:36 -07003281 if (length > I2C_SMBUS_BLOCK_MAX)
3282 length = I2C_SMBUS_BLOCK_MAX;
Linus Torvalds1da177e2005-04-16 15:20:36 -07003283 data.block[0] = length;
Jean Delvare76560322006-01-18 23:14:55 +01003284 memcpy(&data.block[1], values, length);
Farid Hammane7225acf2010-05-21 18:40:58 +02003285 return i2c_smbus_xfer(client->adapter, client->addr, client->flags,
3286 I2C_SMBUS_WRITE, command,
3287 I2C_SMBUS_BLOCK_DATA, &data);
Linus Torvalds1da177e2005-04-16 15:20:36 -07003288}
David Brownellc0564602007-05-01 23:26:31 +02003289EXPORT_SYMBOL(i2c_smbus_write_block_data);
Linus Torvalds1da177e2005-04-16 15:20:36 -07003290
3291/* Returns the number of read bytes */
Jean Delvare0cc43a12011-01-10 22:11:23 +01003292s32 i2c_smbus_read_i2c_block_data(const struct i2c_client *client, u8 command,
Jean Delvare4b2643d2007-07-12 14:12:29 +02003293 u8 length, u8 *values)
Linus Torvalds1da177e2005-04-16 15:20:36 -07003294{
3295 union i2c_smbus_data data;
David Brownell24a5bb72008-07-14 22:38:23 +02003296 int status;
Jean Delvare76560322006-01-18 23:14:55 +01003297
Jean Delvare4b2643d2007-07-12 14:12:29 +02003298 if (length > I2C_SMBUS_BLOCK_MAX)
3299 length = I2C_SMBUS_BLOCK_MAX;
3300 data.block[0] = length;
David Brownell24a5bb72008-07-14 22:38:23 +02003301 status = i2c_smbus_xfer(client->adapter, client->addr, client->flags,
3302 I2C_SMBUS_READ, command,
3303 I2C_SMBUS_I2C_BLOCK_DATA, &data);
3304 if (status < 0)
3305 return status;
Jean Delvare76560322006-01-18 23:14:55 +01003306
3307 memcpy(values, &data.block[1], data.block[0]);
3308 return data.block[0];
Linus Torvalds1da177e2005-04-16 15:20:36 -07003309}
David Brownellc0564602007-05-01 23:26:31 +02003310EXPORT_SYMBOL(i2c_smbus_read_i2c_block_data);
Linus Torvalds1da177e2005-04-16 15:20:36 -07003311
Jean Delvare0cc43a12011-01-10 22:11:23 +01003312s32 i2c_smbus_write_i2c_block_data(const struct i2c_client *client, u8 command,
Krzysztof Halasa46f5ed72006-06-12 21:42:20 +02003313 u8 length, const u8 *values)
Jean Delvare21bbd692006-01-09 15:19:18 +11003314{
3315 union i2c_smbus_data data;
3316
3317 if (length > I2C_SMBUS_BLOCK_MAX)
3318 length = I2C_SMBUS_BLOCK_MAX;
3319 data.block[0] = length;
3320 memcpy(data.block + 1, values, length);
3321 return i2c_smbus_xfer(client->adapter, client->addr, client->flags,
3322 I2C_SMBUS_WRITE, command,
3323 I2C_SMBUS_I2C_BLOCK_DATA, &data);
3324}
David Brownellc0564602007-05-01 23:26:31 +02003325EXPORT_SYMBOL(i2c_smbus_write_i2c_block_data);
Jean Delvare21bbd692006-01-09 15:19:18 +11003326
David Brownell438d6c22006-12-10 21:21:31 +01003327/* Simulate a SMBus command using the i2c protocol
Linus Torvalds1da177e2005-04-16 15:20:36 -07003328 No checking of parameters is done! */
Farid Hammane7225acf2010-05-21 18:40:58 +02003329static s32 i2c_smbus_xfer_emulated(struct i2c_adapter *adapter, u16 addr,
3330 unsigned short flags,
3331 char read_write, u8 command, int size,
3332 union i2c_smbus_data *data)
Linus Torvalds1da177e2005-04-16 15:20:36 -07003333{
3334 /* So we need to generate a series of msgs. In the case of writing, we
3335 need to use only one message; when reading, we need two. We initialize
3336 most things with sane defaults, to keep the code below somewhat
3337 simpler. */
Hideki Iwamoto5c50d182005-09-25 17:01:11 +02003338 unsigned char msgbuf0[I2C_SMBUS_BLOCK_MAX+3];
3339 unsigned char msgbuf1[I2C_SMBUS_BLOCK_MAX+2];
Farid Hammane7225acf2010-05-21 18:40:58 +02003340 int num = read_write == I2C_SMBUS_READ ? 2 : 1;
Linus Torvalds1da177e2005-04-16 15:20:36 -07003341 int i;
Jean Delvare421ef472005-10-26 21:28:55 +02003342 u8 partial_pec = 0;
David Brownell24a5bb72008-07-14 22:38:23 +02003343 int status;
Shubhrajyoti D230da092012-10-05 22:23:52 +02003344 struct i2c_msg msg[2] = {
3345 {
3346 .addr = addr,
3347 .flags = flags,
3348 .len = 1,
3349 .buf = msgbuf0,
3350 }, {
3351 .addr = addr,
3352 .flags = flags | I2C_M_RD,
3353 .len = 0,
3354 .buf = msgbuf1,
3355 },
3356 };
Linus Torvalds1da177e2005-04-16 15:20:36 -07003357
3358 msgbuf0[0] = command;
Farid Hammane7225acf2010-05-21 18:40:58 +02003359 switch (size) {
Linus Torvalds1da177e2005-04-16 15:20:36 -07003360 case I2C_SMBUS_QUICK:
3361 msg[0].len = 0;
3362 /* Special case: The read/write field is used as data */
Roel Kluinf29d2e02009-02-24 19:19:48 +01003363 msg[0].flags = flags | (read_write == I2C_SMBUS_READ ?
3364 I2C_M_RD : 0);
Linus Torvalds1da177e2005-04-16 15:20:36 -07003365 num = 1;
3366 break;
3367 case I2C_SMBUS_BYTE:
3368 if (read_write == I2C_SMBUS_READ) {
3369 /* Special case: only a read! */
3370 msg[0].flags = I2C_M_RD | flags;
3371 num = 1;
3372 }
3373 break;
3374 case I2C_SMBUS_BYTE_DATA:
3375 if (read_write == I2C_SMBUS_READ)
3376 msg[1].len = 1;
3377 else {
3378 msg[0].len = 2;
3379 msgbuf0[1] = data->byte;
3380 }
3381 break;
3382 case I2C_SMBUS_WORD_DATA:
3383 if (read_write == I2C_SMBUS_READ)
3384 msg[1].len = 2;
3385 else {
Farid Hammane7225acf2010-05-21 18:40:58 +02003386 msg[0].len = 3;
Linus Torvalds1da177e2005-04-16 15:20:36 -07003387 msgbuf0[1] = data->word & 0xff;
Jean Delvare7eff82c2006-09-03 22:24:00 +02003388 msgbuf0[2] = data->word >> 8;
Linus Torvalds1da177e2005-04-16 15:20:36 -07003389 }
3390 break;
3391 case I2C_SMBUS_PROC_CALL:
3392 num = 2; /* Special case */
3393 read_write = I2C_SMBUS_READ;
3394 msg[0].len = 3;
3395 msg[1].len = 2;
3396 msgbuf0[1] = data->word & 0xff;
Jean Delvare7eff82c2006-09-03 22:24:00 +02003397 msgbuf0[2] = data->word >> 8;
Linus Torvalds1da177e2005-04-16 15:20:36 -07003398 break;
3399 case I2C_SMBUS_BLOCK_DATA:
Linus Torvalds1da177e2005-04-16 15:20:36 -07003400 if (read_write == I2C_SMBUS_READ) {
Jean Delvare209d27c2007-05-01 23:26:29 +02003401 msg[1].flags |= I2C_M_RECV_LEN;
3402 msg[1].len = 1; /* block length will be added by
3403 the underlying bus driver */
Linus Torvalds1da177e2005-04-16 15:20:36 -07003404 } else {
3405 msg[0].len = data->block[0] + 2;
3406 if (msg[0].len > I2C_SMBUS_BLOCK_MAX + 2) {
David Brownell24a5bb72008-07-14 22:38:23 +02003407 dev_err(&adapter->dev,
3408 "Invalid block write size %d\n",
3409 data->block[0]);
3410 return -EINVAL;
Linus Torvalds1da177e2005-04-16 15:20:36 -07003411 }
Hideki Iwamoto5c50d182005-09-25 17:01:11 +02003412 for (i = 1; i < msg[0].len; i++)
Linus Torvalds1da177e2005-04-16 15:20:36 -07003413 msgbuf0[i] = data->block[i-1];
3414 }
3415 break;
3416 case I2C_SMBUS_BLOCK_PROC_CALL:
Jean Delvare209d27c2007-05-01 23:26:29 +02003417 num = 2; /* Another special case */
3418 read_write = I2C_SMBUS_READ;
3419 if (data->block[0] > I2C_SMBUS_BLOCK_MAX) {
David Brownell24a5bb72008-07-14 22:38:23 +02003420 dev_err(&adapter->dev,
3421 "Invalid block write size %d\n",
Jean Delvare209d27c2007-05-01 23:26:29 +02003422 data->block[0]);
David Brownell24a5bb72008-07-14 22:38:23 +02003423 return -EINVAL;
Jean Delvare209d27c2007-05-01 23:26:29 +02003424 }
3425 msg[0].len = data->block[0] + 2;
3426 for (i = 1; i < msg[0].len; i++)
3427 msgbuf0[i] = data->block[i-1];
3428 msg[1].flags |= I2C_M_RECV_LEN;
3429 msg[1].len = 1; /* block length will be added by
3430 the underlying bus driver */
3431 break;
Linus Torvalds1da177e2005-04-16 15:20:36 -07003432 case I2C_SMBUS_I2C_BLOCK_DATA:
3433 if (read_write == I2C_SMBUS_READ) {
Jean Delvare4b2643d2007-07-12 14:12:29 +02003434 msg[1].len = data->block[0];
Linus Torvalds1da177e2005-04-16 15:20:36 -07003435 } else {
3436 msg[0].len = data->block[0] + 1;
Jean Delvare30dac742005-10-08 00:15:59 +02003437 if (msg[0].len > I2C_SMBUS_BLOCK_MAX + 1) {
David Brownell24a5bb72008-07-14 22:38:23 +02003438 dev_err(&adapter->dev,
3439 "Invalid block write size %d\n",
3440 data->block[0]);
3441 return -EINVAL;
Linus Torvalds1da177e2005-04-16 15:20:36 -07003442 }
3443 for (i = 1; i <= data->block[0]; i++)
3444 msgbuf0[i] = data->block[i];
3445 }
3446 break;
3447 default:
David Brownell24a5bb72008-07-14 22:38:23 +02003448 dev_err(&adapter->dev, "Unsupported transaction %d\n", size);
3449 return -EOPNOTSUPP;
Linus Torvalds1da177e2005-04-16 15:20:36 -07003450 }
3451
Jean Delvare421ef472005-10-26 21:28:55 +02003452 i = ((flags & I2C_CLIENT_PEC) && size != I2C_SMBUS_QUICK
3453 && size != I2C_SMBUS_I2C_BLOCK_DATA);
3454 if (i) {
3455 /* Compute PEC if first message is a write */
3456 if (!(msg[0].flags & I2C_M_RD)) {
David Brownell438d6c22006-12-10 21:21:31 +01003457 if (num == 1) /* Write only */
Jean Delvare421ef472005-10-26 21:28:55 +02003458 i2c_smbus_add_pec(&msg[0]);
3459 else /* Write followed by read */
3460 partial_pec = i2c_smbus_msg_pec(0, &msg[0]);
3461 }
3462 /* Ask for PEC if last message is a read */
3463 if (msg[num-1].flags & I2C_M_RD)
David Brownell438d6c22006-12-10 21:21:31 +01003464 msg[num-1].len++;
Jean Delvare421ef472005-10-26 21:28:55 +02003465 }
3466
David Brownell24a5bb72008-07-14 22:38:23 +02003467 status = i2c_transfer(adapter, msg, num);
3468 if (status < 0)
3469 return status;
Linus Torvalds1da177e2005-04-16 15:20:36 -07003470
Jean Delvare421ef472005-10-26 21:28:55 +02003471 /* Check PEC if last message is a read */
3472 if (i && (msg[num-1].flags & I2C_M_RD)) {
David Brownell24a5bb72008-07-14 22:38:23 +02003473 status = i2c_smbus_check_pec(partial_pec, &msg[num-1]);
3474 if (status < 0)
3475 return status;
Jean Delvare421ef472005-10-26 21:28:55 +02003476 }
3477
Linus Torvalds1da177e2005-04-16 15:20:36 -07003478 if (read_write == I2C_SMBUS_READ)
Farid Hammane7225acf2010-05-21 18:40:58 +02003479 switch (size) {
3480 case I2C_SMBUS_BYTE:
3481 data->byte = msgbuf0[0];
3482 break;
3483 case I2C_SMBUS_BYTE_DATA:
3484 data->byte = msgbuf1[0];
3485 break;
3486 case I2C_SMBUS_WORD_DATA:
3487 case I2C_SMBUS_PROC_CALL:
3488 data->word = msgbuf1[0] | (msgbuf1[1] << 8);
3489 break;
3490 case I2C_SMBUS_I2C_BLOCK_DATA:
3491 for (i = 0; i < data->block[0]; i++)
3492 data->block[i+1] = msgbuf1[i];
3493 break;
3494 case I2C_SMBUS_BLOCK_DATA:
3495 case I2C_SMBUS_BLOCK_PROC_CALL:
3496 for (i = 0; i < msgbuf1[0] + 1; i++)
3497 data->block[i] = msgbuf1[i];
3498 break;
Linus Torvalds1da177e2005-04-16 15:20:36 -07003499 }
3500 return 0;
3501}
3502
David Brownella1cdeda2008-07-14 22:38:24 +02003503/**
3504 * i2c_smbus_xfer - execute SMBus protocol operations
3505 * @adapter: Handle to I2C bus
3506 * @addr: Address of SMBus slave on that bus
3507 * @flags: I2C_CLIENT_* flags (usually zero or I2C_CLIENT_PEC)
3508 * @read_write: I2C_SMBUS_READ or I2C_SMBUS_WRITE
3509 * @command: Byte interpreted by slave, for protocols which use such bytes
3510 * @protocol: SMBus protocol operation to execute, such as I2C_SMBUS_PROC_CALL
3511 * @data: Data to be read or written
3512 *
3513 * This executes an SMBus protocol operation, and returns a negative
3514 * errno code else zero on success.
3515 */
Zhenwen Xu09b8ce02009-03-28 21:34:46 +01003516s32 i2c_smbus_xfer(struct i2c_adapter *adapter, u16 addr, unsigned short flags,
David Brownella1cdeda2008-07-14 22:38:24 +02003517 char read_write, u8 command, int protocol,
Zhenwen Xu09b8ce02009-03-28 21:34:46 +01003518 union i2c_smbus_data *data)
Linus Torvalds1da177e2005-04-16 15:20:36 -07003519{
Clifford Wolf66b650f2009-06-15 18:01:46 +02003520 unsigned long orig_jiffies;
3521 int try;
Linus Torvalds1da177e2005-04-16 15:20:36 -07003522 s32 res;
Linus Torvalds1da177e2005-04-16 15:20:36 -07003523
David Howells8a3259972014-03-06 13:36:06 +00003524 /* If enabled, the following two tracepoints are conditional on
3525 * read_write and protocol.
3526 */
3527 trace_smbus_write(adapter, addr, flags, read_write,
3528 command, protocol, data);
3529 trace_smbus_read(adapter, addr, flags, read_write,
3530 command, protocol);
3531
Laurent Pinchartd47726c2012-07-24 14:13:59 +02003532 flags &= I2C_M_TEN | I2C_CLIENT_PEC | I2C_CLIENT_SCCB;
Linus Torvalds1da177e2005-04-16 15:20:36 -07003533
3534 if (adapter->algo->smbus_xfer) {
Peter Rosin8320f492016-05-04 22:15:27 +02003535 i2c_lock_bus(adapter, I2C_LOCK_SEGMENT);
Clifford Wolf66b650f2009-06-15 18:01:46 +02003536
3537 /* Retry automatically on arbitration loss */
3538 orig_jiffies = jiffies;
3539 for (res = 0, try = 0; try <= adapter->retries; try++) {
3540 res = adapter->algo->smbus_xfer(adapter, addr, flags,
3541 read_write, command,
3542 protocol, data);
3543 if (res != -EAGAIN)
3544 break;
3545 if (time_after(jiffies,
3546 orig_jiffies + adapter->timeout))
3547 break;
3548 }
Peter Rosin8320f492016-05-04 22:15:27 +02003549 i2c_unlock_bus(adapter, I2C_LOCK_SEGMENT);
Linus Torvalds1da177e2005-04-16 15:20:36 -07003550
Laurent Pinchart72fc2c72012-07-24 14:13:59 +02003551 if (res != -EOPNOTSUPP || !adapter->algo->master_xfer)
David Howells8a3259972014-03-06 13:36:06 +00003552 goto trace;
Laurent Pinchart72fc2c72012-07-24 14:13:59 +02003553 /*
3554 * Fall back to i2c_smbus_xfer_emulated if the adapter doesn't
3555 * implement native support for the SMBus operation.
3556 */
3557 }
3558
David Howells8a3259972014-03-06 13:36:06 +00003559 res = i2c_smbus_xfer_emulated(adapter, addr, flags, read_write,
3560 command, protocol, data);
3561
3562trace:
3563 /* If enabled, the reply tracepoint is conditional on read_write. */
3564 trace_smbus_reply(adapter, addr, flags, read_write,
3565 command, protocol, data);
3566 trace_smbus_result(adapter, addr, flags, read_write,
3567 command, protocol, res);
3568
3569 return res;
Linus Torvalds1da177e2005-04-16 15:20:36 -07003570}
Linus Torvalds1da177e2005-04-16 15:20:36 -07003571EXPORT_SYMBOL(i2c_smbus_xfer);
Linus Torvalds1da177e2005-04-16 15:20:36 -07003572
Irina Tirdea01eef962015-08-12 17:31:33 +03003573/**
3574 * i2c_smbus_read_i2c_block_data_or_emulated - read block or emulate
3575 * @client: Handle to slave device
3576 * @command: Byte interpreted by slave
3577 * @length: Size of data block; SMBus allows at most I2C_SMBUS_BLOCK_MAX bytes
3578 * @values: Byte array into which data will be read; big enough to hold
3579 * the data returned by the slave. SMBus allows at most
3580 * I2C_SMBUS_BLOCK_MAX bytes.
3581 *
3582 * This executes the SMBus "block read" protocol if supported by the adapter.
3583 * If block read is not supported, it emulates it using either word or byte
3584 * read protocols depending on availability.
3585 *
3586 * The addresses of the I2C slave device that are accessed with this function
3587 * must be mapped to a linear region, so that a block read will have the same
3588 * effect as a byte read. Before using this function you must double-check
3589 * if the I2C slave does support exchanging a block transfer with a byte
3590 * transfer.
3591 */
3592s32 i2c_smbus_read_i2c_block_data_or_emulated(const struct i2c_client *client,
3593 u8 command, u8 length, u8 *values)
3594{
3595 u8 i = 0;
3596 int status;
3597
3598 if (length > I2C_SMBUS_BLOCK_MAX)
3599 length = I2C_SMBUS_BLOCK_MAX;
3600
3601 if (i2c_check_functionality(client->adapter, I2C_FUNC_SMBUS_READ_I2C_BLOCK))
3602 return i2c_smbus_read_i2c_block_data(client, command, length, values);
3603
3604 if (!i2c_check_functionality(client->adapter, I2C_FUNC_SMBUS_READ_BYTE_DATA))
3605 return -EOPNOTSUPP;
3606
3607 if (i2c_check_functionality(client->adapter, I2C_FUNC_SMBUS_READ_WORD_DATA)) {
3608 while ((i + 2) <= length) {
3609 status = i2c_smbus_read_word_data(client, command + i);
3610 if (status < 0)
3611 return status;
3612 values[i] = status & 0xff;
3613 values[i + 1] = status >> 8;
3614 i += 2;
3615 }
3616 }
3617
3618 while (i < length) {
3619 status = i2c_smbus_read_byte_data(client, command + i);
3620 if (status < 0)
3621 return status;
3622 values[i] = status;
3623 i++;
3624 }
3625
3626 return i;
3627}
3628EXPORT_SYMBOL(i2c_smbus_read_i2c_block_data_or_emulated);
3629
Jean Delvared5fd1202015-01-26 20:59:31 +01003630#if IS_ENABLED(CONFIG_I2C_SLAVE)
Wolfram Sang4b1acc42014-11-18 17:04:53 +01003631int i2c_slave_register(struct i2c_client *client, i2c_slave_cb_t slave_cb)
3632{
3633 int ret;
3634
Wolfram Sang0c7cab92015-05-14 14:40:05 +02003635 if (!client || !slave_cb) {
Colin Ian King26591612016-12-29 22:27:33 +00003636 WARN(1, "insufficient data\n");
Wolfram Sang4b1acc42014-11-18 17:04:53 +01003637 return -EINVAL;
Wolfram Sang0c7cab92015-05-14 14:40:05 +02003638 }
Wolfram Sang4b1acc42014-11-18 17:04:53 +01003639
Wolfram Sangc6909d62015-08-05 21:12:54 +02003640 if (!(client->flags & I2C_CLIENT_SLAVE))
3641 dev_warn(&client->dev, "%s: client slave flag not set. You might see address collisions\n",
3642 __func__);
3643
Wolfram Sang4b1acc42014-11-18 17:04:53 +01003644 if (!(client->flags & I2C_CLIENT_TEN)) {
3645 /* Enforce stricter address checking */
Wolfram Sang66be60562015-07-17 12:43:22 +02003646 ret = i2c_check_7bit_addr_validity_strict(client->addr);
Wolfram Sang0c7cab92015-05-14 14:40:05 +02003647 if (ret) {
3648 dev_err(&client->dev, "%s: invalid address\n", __func__);
Wolfram Sang4b1acc42014-11-18 17:04:53 +01003649 return ret;
Wolfram Sang0c7cab92015-05-14 14:40:05 +02003650 }
Wolfram Sang4b1acc42014-11-18 17:04:53 +01003651 }
3652
Wolfram Sang0c7cab92015-05-14 14:40:05 +02003653 if (!client->adapter->algo->reg_slave) {
3654 dev_err(&client->dev, "%s: not supported by adapter\n", __func__);
Wolfram Sang4b1acc42014-11-18 17:04:53 +01003655 return -EOPNOTSUPP;
Wolfram Sang0c7cab92015-05-14 14:40:05 +02003656 }
Wolfram Sang4b1acc42014-11-18 17:04:53 +01003657
3658 client->slave_cb = slave_cb;
3659
3660 i2c_lock_adapter(client->adapter);
3661 ret = client->adapter->algo->reg_slave(client);
3662 i2c_unlock_adapter(client->adapter);
3663
Wolfram Sang0c7cab92015-05-14 14:40:05 +02003664 if (ret) {
Wolfram Sang4b1acc42014-11-18 17:04:53 +01003665 client->slave_cb = NULL;
Wolfram Sang0c7cab92015-05-14 14:40:05 +02003666 dev_err(&client->dev, "%s: adapter returned error %d\n", __func__, ret);
3667 }
Wolfram Sang4b1acc42014-11-18 17:04:53 +01003668
3669 return ret;
3670}
3671EXPORT_SYMBOL_GPL(i2c_slave_register);
3672
3673int i2c_slave_unregister(struct i2c_client *client)
3674{
3675 int ret;
3676
Wolfram Sang0c7cab92015-05-14 14:40:05 +02003677 if (!client->adapter->algo->unreg_slave) {
3678 dev_err(&client->dev, "%s: not supported by adapter\n", __func__);
Wolfram Sang4b1acc42014-11-18 17:04:53 +01003679 return -EOPNOTSUPP;
Wolfram Sang0c7cab92015-05-14 14:40:05 +02003680 }
Wolfram Sang4b1acc42014-11-18 17:04:53 +01003681
3682 i2c_lock_adapter(client->adapter);
3683 ret = client->adapter->algo->unreg_slave(client);
3684 i2c_unlock_adapter(client->adapter);
3685
3686 if (ret == 0)
3687 client->slave_cb = NULL;
Wolfram Sang0c7cab92015-05-14 14:40:05 +02003688 else
3689 dev_err(&client->dev, "%s: adapter returned error %d\n", __func__, ret);
Wolfram Sang4b1acc42014-11-18 17:04:53 +01003690
3691 return ret;
3692}
3693EXPORT_SYMBOL_GPL(i2c_slave_unregister);
Jean Delvared5fd1202015-01-26 20:59:31 +01003694#endif
Wolfram Sang4b1acc42014-11-18 17:04:53 +01003695
Linus Torvalds1da177e2005-04-16 15:20:36 -07003696MODULE_AUTHOR("Simon G. Vogl <simon@tk.uni-linz.ac.at>");
3697MODULE_DESCRIPTION("I2C-Bus main module");
3698MODULE_LICENSE("GPL");