Merge branch 'i2c-for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/jdelvare/staging

* 'i2c-for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/jdelvare/staging:
i2c: Constify i2c_client where possible
i2c-algo-bit: Complain about masters which can't read SCL
i2c-algo-bit: Refactor adapter registration
i2c: Add generic I2C multiplexer using GPIO API
i2c-nforce2: Remove unnecessary cast of pci_get_drvdata
i2c-i801: Include <linux/slab.h>

+362 -48
+65
Documentation/i2c/muxes/gpio-i2cmux
··· 1 + Kernel driver gpio-i2cmux 2 + 3 + Author: Peter Korsgaard <peter.korsgaard@barco.com> 4 + 5 + Description 6 + ----------- 7 + 8 + gpio-i2cmux is an i2c mux driver providing access to I2C bus segments 9 + from a master I2C bus and a hardware MUX controlled through GPIO pins. 10 + 11 + E.G.: 12 + 13 + ---------- ---------- Bus segment 1 - - - - - 14 + | | SCL/SDA | |-------------- | | 15 + | |------------| | 16 + | | | | Bus segment 2 | | 17 + | Linux | GPIO 1..N | MUX |--------------- Devices 18 + | |------------| | | | 19 + | | | | Bus segment M 20 + | | | |---------------| | 21 + ---------- ---------- - - - - - 22 + 23 + SCL/SDA of the master I2C bus is multiplexed to bus segment 1..M 24 + according to the settings of the GPIO pins 1..N. 25 + 26 + Usage 27 + ----- 28 + 29 + gpio-i2cmux uses the platform bus, so you need to provide a struct 30 + platform_device with the platform_data pointing to a struct 31 + gpio_i2cmux_platform_data with the I2C adapter number of the master 32 + bus, the number of bus segments to create and the GPIO pins used 33 + to control it. See include/linux/gpio-i2cmux.h for details. 34 + 35 + E.G. something like this for a MUX providing 4 bus segments 36 + controlled through 3 GPIO pins: 37 + 38 + #include <linux/gpio-i2cmux.h> 39 + #include <linux/platform_device.h> 40 + 41 + static const unsigned myboard_gpiomux_gpios[] = { 42 + AT91_PIN_PC26, AT91_PIN_PC25, AT91_PIN_PC24 43 + }; 44 + 45 + static const unsigned myboard_gpiomux_values[] = { 46 + 0, 1, 2, 3 47 + }; 48 + 49 + static struct gpio_i2cmux_platform_data myboard_i2cmux_data = { 50 + .parent = 1, 51 + .base_nr = 2, /* optional */ 52 + .values = myboard_gpiomux_values, 53 + .n_values = ARRAY_SIZE(myboard_gpiomux_values), 54 + .gpios = myboard_gpiomux_gpios, 55 + .n_gpios = ARRAY_SIZE(myboard_gpiomux_gpios), 56 + .idle = 4, /* optional */ 57 + }; 58 + 59 + static struct platform_device myboard_i2cmux = { 60 + .name = "gpio-i2cmux", 61 + .id = 0, 62 + .dev = { 63 + .platform_data = &myboard_i2cmux_data, 64 + }, 65 + };
+8
MAINTAINERS
··· 2692 2692 F: drivers/i2c/busses/i2c-gpio.c 2693 2693 F: include/linux/i2c-gpio.h 2694 2694 2695 + GENERIC GPIO I2C MULTIPLEXER DRIVER 2696 + M: Peter Korsgaard <peter.korsgaard@barco.com> 2697 + L: linux-i2c@vger.kernel.org 2698 + S: Supported 2699 + F: drivers/i2c/muxes/gpio-i2cmux.c 2700 + F: include/linux/gpio-i2cmux.h 2701 + F: Documentation/i2c/muxes/gpio-i2cmux 2702 + 2695 2703 GENERIC HDLC (WAN) DRIVERS 2696 2704 M: Krzysztof Halasa <khc@pm.waw.pl> 2697 2705 W: http://www.kernel.org/pub/linux/utils/net/hdlc/
+15 -16
drivers/i2c/algos/i2c-algo-bit.c
··· 600 600 /* 601 601 * registering functions to load algorithms at runtime 602 602 */ 603 - static int i2c_bit_prepare_bus(struct i2c_adapter *adap) 603 + static int __i2c_bit_add_bus(struct i2c_adapter *adap, 604 + int (*add_adapter)(struct i2c_adapter *)) 604 605 { 605 606 struct i2c_algo_bit_data *bit_adap = adap->algo_data; 607 + int ret; 606 608 607 609 if (bit_test) { 608 - int ret = test_bus(bit_adap, adap->name); 610 + ret = test_bus(bit_adap, adap->name); 609 611 if (ret < 0) 610 612 return -ENODEV; 611 613 } ··· 616 614 adap->algo = &i2c_bit_algo; 617 615 adap->retries = 3; 618 616 617 + ret = add_adapter(adap); 618 + if (ret < 0) 619 + return ret; 620 + 621 + /* Complain if SCL can't be read */ 622 + if (bit_adap->getscl == NULL) { 623 + dev_warn(&adap->dev, "Not I2C compliant: can't read SCL\n"); 624 + dev_warn(&adap->dev, "Bus may be unreliable\n"); 625 + } 619 626 return 0; 620 627 } 621 628 622 629 int i2c_bit_add_bus(struct i2c_adapter *adap) 623 630 { 624 - int err; 625 - 626 - err = i2c_bit_prepare_bus(adap); 627 - if (err) 628 - return err; 629 - 630 - return i2c_add_adapter(adap); 631 + return __i2c_bit_add_bus(adap, i2c_add_adapter); 631 632 } 632 633 EXPORT_SYMBOL(i2c_bit_add_bus); 633 634 634 635 int i2c_bit_add_numbered_bus(struct i2c_adapter *adap) 635 636 { 636 - int err; 637 - 638 - err = i2c_bit_prepare_bus(adap); 639 - if (err) 640 - return err; 641 - 642 - return i2c_add_numbered_adapter(adap); 637 + return __i2c_bit_add_bus(adap, i2c_add_numbered_adapter); 643 638 } 644 639 EXPORT_SYMBOL(i2c_bit_add_numbered_bus); 645 640
+1
drivers/i2c/busses/i2c-i801.c
··· 72 72 #include <linux/acpi.h> 73 73 #include <linux/io.h> 74 74 #include <linux/dmi.h> 75 + #include <linux/slab.h> 75 76 76 77 /* I801 SMBus address offsets */ 77 78 #define SMBHSTSTS(p) (0 + (p)->smba)
+1 -1
drivers/i2c/busses/i2c-nforce2.c
··· 432 432 433 433 static void __devexit nforce2_remove(struct pci_dev *dev) 434 434 { 435 - struct nforce2_smbus *smbuses = (void*) pci_get_drvdata(dev); 435 + struct nforce2_smbus *smbuses = pci_get_drvdata(dev); 436 436 437 437 nforce2_set_reference(NULL); 438 438 if (smbuses[0].base) {
+16 -13
drivers/i2c/i2c-core.c
··· 1362 1362 * 1363 1363 * Returns negative errno, or else the number of bytes written. 1364 1364 */ 1365 - int i2c_master_send(struct i2c_client *client, const char *buf, int count) 1365 + int i2c_master_send(const struct i2c_client *client, const char *buf, int count) 1366 1366 { 1367 1367 int ret; 1368 1368 struct i2c_adapter *adap = client->adapter; ··· 1389 1389 * 1390 1390 * Returns negative errno, or else the number of bytes read. 1391 1391 */ 1392 - int i2c_master_recv(struct i2c_client *client, char *buf, int count) 1392 + int i2c_master_recv(const struct i2c_client *client, char *buf, int count) 1393 1393 { 1394 1394 struct i2c_adapter *adap = client->adapter; 1395 1395 struct i2c_msg msg; ··· 1679 1679 * This executes the SMBus "receive byte" protocol, returning negative errno 1680 1680 * else the byte received from the device. 1681 1681 */ 1682 - s32 i2c_smbus_read_byte(struct i2c_client *client) 1682 + s32 i2c_smbus_read_byte(const struct i2c_client *client) 1683 1683 { 1684 1684 union i2c_smbus_data data; 1685 1685 int status; ··· 1699 1699 * This executes the SMBus "send byte" protocol, returning negative errno 1700 1700 * else zero on success. 1701 1701 */ 1702 - s32 i2c_smbus_write_byte(struct i2c_client *client, u8 value) 1702 + s32 i2c_smbus_write_byte(const struct i2c_client *client, u8 value) 1703 1703 { 1704 1704 return i2c_smbus_xfer(client->adapter, client->addr, client->flags, 1705 1705 I2C_SMBUS_WRITE, value, I2C_SMBUS_BYTE, NULL); ··· 1714 1714 * This executes the SMBus "read byte" protocol, returning negative errno 1715 1715 * else a data byte received from the device. 1716 1716 */ 1717 - s32 i2c_smbus_read_byte_data(struct i2c_client *client, u8 command) 1717 + s32 i2c_smbus_read_byte_data(const struct i2c_client *client, u8 command) 1718 1718 { 1719 1719 union i2c_smbus_data data; 1720 1720 int status; ··· 1735 1735 * This executes the SMBus "write byte" protocol, returning negative errno 1736 1736 * else zero on success. 1737 1737 */ 1738 - s32 i2c_smbus_write_byte_data(struct i2c_client *client, u8 command, u8 value) 1738 + s32 i2c_smbus_write_byte_data(const struct i2c_client *client, u8 command, 1739 + u8 value) 1739 1740 { 1740 1741 union i2c_smbus_data data; 1741 1742 data.byte = value; ··· 1754 1753 * This executes the SMBus "read word" protocol, returning negative errno 1755 1754 * else a 16-bit unsigned "word" received from the device. 1756 1755 */ 1757 - s32 i2c_smbus_read_word_data(struct i2c_client *client, u8 command) 1756 + s32 i2c_smbus_read_word_data(const struct i2c_client *client, u8 command) 1758 1757 { 1759 1758 union i2c_smbus_data data; 1760 1759 int status; ··· 1775 1774 * This executes the SMBus "write word" protocol, returning negative errno 1776 1775 * else zero on success. 1777 1776 */ 1778 - s32 i2c_smbus_write_word_data(struct i2c_client *client, u8 command, u16 value) 1777 + s32 i2c_smbus_write_word_data(const struct i2c_client *client, u8 command, 1778 + u16 value) 1779 1779 { 1780 1780 union i2c_smbus_data data; 1781 1781 data.word = value; ··· 1795 1793 * This executes the SMBus "process call" protocol, returning negative errno 1796 1794 * else a 16-bit unsigned "word" received from the device. 1797 1795 */ 1798 - s32 i2c_smbus_process_call(struct i2c_client *client, u8 command, u16 value) 1796 + s32 i2c_smbus_process_call(const struct i2c_client *client, u8 command, 1797 + u16 value) 1799 1798 { 1800 1799 union i2c_smbus_data data; 1801 1800 int status; ··· 1824 1821 * support this; its emulation through I2C messaging relies on a specific 1825 1822 * mechanism (I2C_M_RECV_LEN) which may not be implemented. 1826 1823 */ 1827 - s32 i2c_smbus_read_block_data(struct i2c_client *client, u8 command, 1824 + s32 i2c_smbus_read_block_data(const struct i2c_client *client, u8 command, 1828 1825 u8 *values) 1829 1826 { 1830 1827 union i2c_smbus_data data; ··· 1851 1848 * This executes the SMBus "block write" protocol, returning negative errno 1852 1849 * else zero on success. 1853 1850 */ 1854 - s32 i2c_smbus_write_block_data(struct i2c_client *client, u8 command, 1851 + s32 i2c_smbus_write_block_data(const struct i2c_client *client, u8 command, 1855 1852 u8 length, const u8 *values) 1856 1853 { 1857 1854 union i2c_smbus_data data; ··· 1867 1864 EXPORT_SYMBOL(i2c_smbus_write_block_data); 1868 1865 1869 1866 /* Returns the number of read bytes */ 1870 - s32 i2c_smbus_read_i2c_block_data(struct i2c_client *client, u8 command, 1867 + s32 i2c_smbus_read_i2c_block_data(const struct i2c_client *client, u8 command, 1871 1868 u8 length, u8 *values) 1872 1869 { 1873 1870 union i2c_smbus_data data; ··· 1887 1884 } 1888 1885 EXPORT_SYMBOL(i2c_smbus_read_i2c_block_data); 1889 1886 1890 - s32 i2c_smbus_write_i2c_block_data(struct i2c_client *client, u8 command, 1887 + s32 i2c_smbus_write_i2c_block_data(const struct i2c_client *client, u8 command, 1891 1888 u8 length, const u8 *values) 1892 1889 { 1893 1890 union i2c_smbus_data data;
+12
drivers/i2c/muxes/Kconfig
··· 5 5 menu "Multiplexer I2C Chip support" 6 6 depends on I2C_MUX 7 7 8 + config I2C_MUX_GPIO 9 + tristate "GPIO-based I2C multiplexer" 10 + depends on GENERIC_GPIO 11 + help 12 + If you say yes to this option, support will be included for a 13 + GPIO based I2C multiplexer. This driver provides access to 14 + I2C busses connected through a MUX, which is controlled 15 + through GPIO pins. 16 + 17 + This driver can also be built as a module. If so, the module 18 + will be called gpio-i2cmux. 19 + 8 20 config I2C_MUX_PCA9541 9 21 tristate "NXP PCA9541 I2C Master Selector" 10 22 depends on EXPERIMENTAL
+1
drivers/i2c/muxes/Makefile
··· 1 1 # 2 2 # Makefile for multiplexer I2C chip drivers. 3 3 4 + obj-$(CONFIG_I2C_MUX_GPIO) += gpio-i2cmux.o 4 5 obj-$(CONFIG_I2C_MUX_PCA9541) += pca9541.o 5 6 obj-$(CONFIG_I2C_MUX_PCA954x) += pca954x.o 6 7
+184
drivers/i2c/muxes/gpio-i2cmux.c
··· 1 + /* 2 + * I2C multiplexer using GPIO API 3 + * 4 + * Peter Korsgaard <peter.korsgaard@barco.com> 5 + * 6 + * This program is free software; you can redistribute it and/or modify 7 + * it under the terms of the GNU General Public License version 2 as 8 + * published by the Free Software Foundation. 9 + */ 10 + 11 + #include <linux/i2c.h> 12 + #include <linux/i2c-mux.h> 13 + #include <linux/gpio-i2cmux.h> 14 + #include <linux/platform_device.h> 15 + #include <linux/init.h> 16 + #include <linux/module.h> 17 + #include <linux/slab.h> 18 + #include <linux/gpio.h> 19 + 20 + struct gpiomux { 21 + struct i2c_adapter *parent; 22 + struct i2c_adapter **adap; /* child busses */ 23 + struct gpio_i2cmux_platform_data data; 24 + }; 25 + 26 + static void gpiomux_set(const struct gpiomux *mux, unsigned val) 27 + { 28 + int i; 29 + 30 + for (i = 0; i < mux->data.n_gpios; i++) 31 + gpio_set_value(mux->data.gpios[i], val & (1 << i)); 32 + } 33 + 34 + static int gpiomux_select(struct i2c_adapter *adap, void *data, u32 chan) 35 + { 36 + struct gpiomux *mux = data; 37 + 38 + gpiomux_set(mux, mux->data.values[chan]); 39 + 40 + return 0; 41 + } 42 + 43 + static int gpiomux_deselect(struct i2c_adapter *adap, void *data, u32 chan) 44 + { 45 + struct gpiomux *mux = data; 46 + 47 + gpiomux_set(mux, mux->data.idle); 48 + 49 + return 0; 50 + } 51 + 52 + static int __devinit gpiomux_probe(struct platform_device *pdev) 53 + { 54 + struct gpiomux *mux; 55 + struct gpio_i2cmux_platform_data *pdata; 56 + struct i2c_adapter *parent; 57 + int (*deselect) (struct i2c_adapter *, void *, u32); 58 + unsigned initial_state; 59 + int i, ret; 60 + 61 + pdata = pdev->dev.platform_data; 62 + if (!pdata) { 63 + dev_err(&pdev->dev, "Missing platform data\n"); 64 + return -ENODEV; 65 + } 66 + 67 + parent = i2c_get_adapter(pdata->parent); 68 + if (!parent) { 69 + dev_err(&pdev->dev, "Parent adapter (%d) not found\n", 70 + pdata->parent); 71 + return -ENODEV; 72 + } 73 + 74 + mux = kzalloc(sizeof(*mux), GFP_KERNEL); 75 + if (!mux) { 76 + ret = -ENOMEM; 77 + goto alloc_failed; 78 + } 79 + 80 + mux->parent = parent; 81 + mux->data = *pdata; 82 + mux->adap = kzalloc(sizeof(struct i2c_adapter *) * pdata->n_values, 83 + GFP_KERNEL); 84 + if (!mux->adap) { 85 + ret = -ENOMEM; 86 + goto alloc_failed2; 87 + } 88 + 89 + if (pdata->idle != GPIO_I2CMUX_NO_IDLE) { 90 + initial_state = pdata->idle; 91 + deselect = gpiomux_deselect; 92 + } else { 93 + initial_state = pdata->values[0]; 94 + deselect = NULL; 95 + } 96 + 97 + for (i = 0; i < pdata->n_gpios; i++) { 98 + ret = gpio_request(pdata->gpios[i], "gpio-i2cmux"); 99 + if (ret) 100 + goto err_request_gpio; 101 + gpio_direction_output(pdata->gpios[i], 102 + initial_state & (1 << i)); 103 + } 104 + 105 + for (i = 0; i < pdata->n_values; i++) { 106 + u32 nr = pdata->base_nr ? (pdata->base_nr + i) : 0; 107 + 108 + mux->adap[i] = i2c_add_mux_adapter(parent, mux, nr, i, 109 + gpiomux_select, deselect); 110 + if (!mux->adap[i]) { 111 + ret = -ENODEV; 112 + dev_err(&pdev->dev, "Failed to add adapter %d\n", i); 113 + goto add_adapter_failed; 114 + } 115 + } 116 + 117 + dev_info(&pdev->dev, "%d port mux on %s adapter\n", 118 + pdata->n_values, parent->name); 119 + 120 + platform_set_drvdata(pdev, mux); 121 + 122 + return 0; 123 + 124 + add_adapter_failed: 125 + for (; i > 0; i--) 126 + i2c_del_mux_adapter(mux->adap[i - 1]); 127 + i = pdata->n_gpios; 128 + err_request_gpio: 129 + for (; i > 0; i--) 130 + gpio_free(pdata->gpios[i - 1]); 131 + kfree(mux->adap); 132 + alloc_failed2: 133 + kfree(mux); 134 + alloc_failed: 135 + i2c_put_adapter(parent); 136 + 137 + return ret; 138 + } 139 + 140 + static int __devexit gpiomux_remove(struct platform_device *pdev) 141 + { 142 + struct gpiomux *mux = platform_get_drvdata(pdev); 143 + int i; 144 + 145 + for (i = 0; i < mux->data.n_values; i++) 146 + i2c_del_mux_adapter(mux->adap[i]); 147 + 148 + for (i = 0; i < mux->data.n_gpios; i++) 149 + gpio_free(mux->data.gpios[i]); 150 + 151 + platform_set_drvdata(pdev, NULL); 152 + i2c_put_adapter(mux->parent); 153 + kfree(mux->adap); 154 + kfree(mux); 155 + 156 + return 0; 157 + } 158 + 159 + static struct platform_driver gpiomux_driver = { 160 + .probe = gpiomux_probe, 161 + .remove = __devexit_p(gpiomux_remove), 162 + .driver = { 163 + .owner = THIS_MODULE, 164 + .name = "gpio-i2cmux", 165 + }, 166 + }; 167 + 168 + static int __init gpiomux_init(void) 169 + { 170 + return platform_driver_register(&gpiomux_driver); 171 + } 172 + 173 + static void __exit gpiomux_exit(void) 174 + { 175 + platform_driver_unregister(&gpiomux_driver); 176 + } 177 + 178 + module_init(gpiomux_init); 179 + module_exit(gpiomux_exit); 180 + 181 + MODULE_DESCRIPTION("GPIO-based I2C multiplexer driver"); 182 + MODULE_AUTHOR("Peter Korsgaard <peter.korsgaard@barco.com>"); 183 + MODULE_LICENSE("GPL"); 184 + MODULE_ALIAS("platform:gpio-i2cmux");
+6 -6
drivers/rtc/rtc-ds1307.c
··· 106 106 struct i2c_client *client; 107 107 struct rtc_device *rtc; 108 108 struct work_struct work; 109 - s32 (*read_block_data)(struct i2c_client *client, u8 command, 109 + s32 (*read_block_data)(const struct i2c_client *client, u8 command, 110 110 u8 length, u8 *values); 111 - s32 (*write_block_data)(struct i2c_client *client, u8 command, 111 + s32 (*write_block_data)(const struct i2c_client *client, u8 command, 112 112 u8 length, const u8 *values); 113 113 }; 114 114 ··· 158 158 159 159 #define BLOCK_DATA_MAX_TRIES 10 160 160 161 - static s32 ds1307_read_block_data_once(struct i2c_client *client, u8 command, 162 - u8 length, u8 *values) 161 + static s32 ds1307_read_block_data_once(const struct i2c_client *client, 162 + u8 command, u8 length, u8 *values) 163 163 { 164 164 s32 i, data; 165 165 ··· 172 172 return i; 173 173 } 174 174 175 - static s32 ds1307_read_block_data(struct i2c_client *client, u8 command, 175 + static s32 ds1307_read_block_data(const struct i2c_client *client, u8 command, 176 176 u8 length, u8 *values) 177 177 { 178 178 u8 oldvalues[I2C_SMBUS_BLOCK_MAX]; ··· 198 198 return length; 199 199 } 200 200 201 - static s32 ds1307_write_block_data(struct i2c_client *client, u8 command, 201 + static s32 ds1307_write_block_data(const struct i2c_client *client, u8 command, 202 202 u8 length, const u8 *values) 203 203 { 204 204 u8 currvalues[I2C_SMBUS_BLOCK_MAX];
+38
include/linux/gpio-i2cmux.h
··· 1 + /* 2 + * gpio-i2cmux interface to platform code 3 + * 4 + * Peter Korsgaard <peter.korsgaard@barco.com> 5 + * 6 + * This program is free software; you can redistribute it and/or modify 7 + * it under the terms of the GNU General Public License version 2 as 8 + * published by the Free Software Foundation. 9 + */ 10 + 11 + #ifndef _LINUX_GPIO_I2CMUX_H 12 + #define _LINUX_GPIO_I2CMUX_H 13 + 14 + /* MUX has no specific idle mode */ 15 + #define GPIO_I2CMUX_NO_IDLE ((unsigned)-1) 16 + 17 + /** 18 + * struct gpio_i2cmux_platform_data - Platform-dependent data for gpio-i2cmux 19 + * @parent: Parent I2C bus adapter number 20 + * @base_nr: Base I2C bus number to number adapters from or zero for dynamic 21 + * @values: Array of bitmasks of GPIO settings (low/high) for each 22 + * position 23 + * @n_values: Number of multiplexer positions (busses to instantiate) 24 + * @gpios: Array of GPIO numbers used to control MUX 25 + * @n_gpios: Number of GPIOs used to control MUX 26 + * @idle: Bitmask to write to MUX when idle or GPIO_I2CMUX_NO_IDLE if not used 27 + */ 28 + struct gpio_i2cmux_platform_data { 29 + int parent; 30 + int base_nr; 31 + const unsigned *values; 32 + int n_values; 33 + const unsigned *gpios; 34 + int n_gpios; 35 + unsigned idle; 36 + }; 37 + 38 + #endif /* _LINUX_GPIO_I2CMUX_H */
+15 -12
include/linux/i2c.h
··· 57 57 * transmit an arbitrary number of messages without interruption. 58 58 * @count must be be less than 64k since msg.len is u16. 59 59 */ 60 - extern int i2c_master_send(struct i2c_client *client, const char *buf, 60 + extern int i2c_master_send(const struct i2c_client *client, const char *buf, 61 61 int count); 62 - extern int i2c_master_recv(struct i2c_client *client, char *buf, int count); 62 + extern int i2c_master_recv(const struct i2c_client *client, char *buf, 63 + int count); 63 64 64 65 /* Transfer num messages. 65 66 */ ··· 79 78 /* Now follow the 'nice' access routines. These also document the calling 80 79 conventions of i2c_smbus_xfer. */ 81 80 82 - extern s32 i2c_smbus_read_byte(struct i2c_client *client); 83 - extern s32 i2c_smbus_write_byte(struct i2c_client *client, u8 value); 84 - extern s32 i2c_smbus_read_byte_data(struct i2c_client *client, u8 command); 85 - extern s32 i2c_smbus_write_byte_data(struct i2c_client *client, 81 + extern s32 i2c_smbus_read_byte(const struct i2c_client *client); 82 + extern s32 i2c_smbus_write_byte(const struct i2c_client *client, u8 value); 83 + extern s32 i2c_smbus_read_byte_data(const struct i2c_client *client, 84 + u8 command); 85 + extern s32 i2c_smbus_write_byte_data(const struct i2c_client *client, 86 86 u8 command, u8 value); 87 - extern s32 i2c_smbus_read_word_data(struct i2c_client *client, u8 command); 88 - extern s32 i2c_smbus_write_word_data(struct i2c_client *client, 87 + extern s32 i2c_smbus_read_word_data(const struct i2c_client *client, 88 + u8 command); 89 + extern s32 i2c_smbus_write_word_data(const struct i2c_client *client, 89 90 u8 command, u16 value); 90 91 /* Returns the number of read bytes */ 91 - extern s32 i2c_smbus_read_block_data(struct i2c_client *client, 92 + extern s32 i2c_smbus_read_block_data(const struct i2c_client *client, 92 93 u8 command, u8 *values); 93 - extern s32 i2c_smbus_write_block_data(struct i2c_client *client, 94 + extern s32 i2c_smbus_write_block_data(const struct i2c_client *client, 94 95 u8 command, u8 length, const u8 *values); 95 96 /* Returns the number of read bytes */ 96 - extern s32 i2c_smbus_read_i2c_block_data(struct i2c_client *client, 97 + extern s32 i2c_smbus_read_i2c_block_data(const struct i2c_client *client, 97 98 u8 command, u8 length, u8 *values); 98 - extern s32 i2c_smbus_write_i2c_block_data(struct i2c_client *client, 99 + extern s32 i2c_smbus_write_i2c_block_data(const struct i2c_client *client, 99 100 u8 command, u8 length, 100 101 const u8 *values); 101 102 #endif /* I2C */