diff options
author | Linus Torvalds | 2020-02-07 12:54:13 -0800 |
---|---|---|
committer | Linus Torvalds | 2020-02-07 12:54:13 -0800 |
commit | 11777ee8b04acab07c96959e9c6ac6a1603d0958 (patch) | |
tree | 52a7bf02de5076afd4bac1b351bdd2f7c59ff847 /include | |
parent | ed39ba0ec1156407040e7509cb19299b5dda3815 (diff) | |
parent | b49f8e0e7bd17b968129790e40f9e2566f4f95ec (diff) |
Merge branch 'i2c/for-5.6' of git://git.kernel.org/pub/scm/linux/kernel/git/wsa/linux
Pull i2c updates from Wolfram Sang:
"i2c core:
- huge improvements and refactorizations of the Linux I2C
documentation (lots of thanks to Luca for doing it and Jean for the
careful review)
- subsystem wide API conversion to i2c_new_client_device()
- remove obsolete parport-light driver
- smaller core updates (removal of 'extern', enabling more compile
testing, use more helper macros)
- and quite a bunch of driver updates (new IDs, simplifications,
better PM, support of atomic transfers and other improvements)
i2c-mux:
- The main feature is the idle-state rework of the pca954x driver
from Biwen Li
at24 driver:
- minor maintenance: update the license tag, sort headers
- move support for the write-protect pin into nvmem core
- add a reference to the new wp-gpios property in nvmem to at25
bindings
- add support for regulator and pm_runtime control"
* 'i2c/for-5.6' of git://git.kernel.org/pub/scm/linux/kernel/git/wsa/linux: (91 commits)
i2c: cros-ec-tunnel: Fix ACPI identifier
i2c: cros-ec-tunnel: Fix slave device enumeration
i2c: stm32f7: add PM_SLEEP suspend/resume support
i2c: cadence: Fix wording in i2c-cadence driver
i2c: cadence: Fix power management order of operations
i2c: cadence: Fix error printing in case of defer
i2c: cadence: Handle transfer_size rollover
i2c: i801: Add support for Intel Comet Lake PCH-V
docs: i2c: writing-clients: properly name the stop condition
docs: i2c: i2c-protocol: use same wording as smbus-protocol
docs: i2c: rename sections so the overall picture is clearer
docs: i2c: old-module-parameters: use monospace instead of ""
docs: i2c: old-module-parameters: clarify this is for obsolete kernels
docs: i2c: old-module-parameters: fix internal hyperlink
docs: i2c: instantiating-devices: use monospace for sysfs attributes
docs: i2c: instantiating-devices: rearrange static instatiation
docs: i2c: instantiating-devices: fix internal hyperlink
docs: i2c: smbus-protocol: improve I2C Block transactions description
docs: i2c: smbus-protocol: fix punctuation
docs: i2c: smbus-protocol: fix typo
...
Diffstat (limited to 'include')
-rw-r--r-- | include/linux/i2c.h | 115 | ||||
-rw-r--r-- | include/linux/nvmem-provider.h | 3 |
2 files changed, 58 insertions, 60 deletions
diff --git a/include/linux/i2c.h b/include/linux/i2c.h index 582ef05ec07e..f834687989f7 100644 --- a/include/linux/i2c.h +++ b/include/linux/i2c.h @@ -50,8 +50,8 @@ struct property_entry; * transmit an arbitrary number of messages without interruption. * @count must be be less than 64k since msg.len is u16. */ -extern int i2c_transfer_buffer_flags(const struct i2c_client *client, - char *buf, int count, u16 flags); +int i2c_transfer_buffer_flags(const struct i2c_client *client, + char *buf, int count, u16 flags); /** * i2c_master_recv - issue a single I2C message in master receive mode @@ -115,11 +115,9 @@ static inline int i2c_master_send_dmasafe(const struct i2c_client *client, /* Transfer num messages. */ -extern int i2c_transfer(struct i2c_adapter *adap, struct i2c_msg *msgs, - int num); +int i2c_transfer(struct i2c_adapter *adap, struct i2c_msg *msgs, int num); /* Unlocked flavor */ -extern int __i2c_transfer(struct i2c_adapter *adap, struct i2c_msg *msgs, - int num); +int __i2c_transfer(struct i2c_adapter *adap, struct i2c_msg *msgs, int num); /* This is the very generalized SMBus access routine. You probably do not want to use this, though; one of the functions below may be much easier, @@ -138,16 +136,14 @@ s32 __i2c_smbus_xfer(struct i2c_adapter *adapter, u16 addr, /* Now follow the 'nice' access routines. These also document the calling conventions of i2c_smbus_xfer. */ -extern s32 i2c_smbus_read_byte(const struct i2c_client *client); -extern s32 i2c_smbus_write_byte(const struct i2c_client *client, u8 value); -extern s32 i2c_smbus_read_byte_data(const struct i2c_client *client, - u8 command); -extern s32 i2c_smbus_write_byte_data(const struct i2c_client *client, - u8 command, u8 value); -extern s32 i2c_smbus_read_word_data(const struct i2c_client *client, - u8 command); -extern s32 i2c_smbus_write_word_data(const struct i2c_client *client, - u8 command, u16 value); +s32 i2c_smbus_read_byte(const struct i2c_client *client); +s32 i2c_smbus_write_byte(const struct i2c_client *client, u8 value); +s32 i2c_smbus_read_byte_data(const struct i2c_client *client, u8 command); +s32 i2c_smbus_write_byte_data(const struct i2c_client *client, + u8 command, u8 value); +s32 i2c_smbus_read_word_data(const struct i2c_client *client, u8 command); +s32 i2c_smbus_write_word_data(const struct i2c_client *client, + u8 command, u16 value); static inline s32 i2c_smbus_read_word_swapped(const struct i2c_client *client, u8 command) @@ -165,19 +161,18 @@ i2c_smbus_write_word_swapped(const struct i2c_client *client, } /* Returns the number of read bytes */ -extern s32 i2c_smbus_read_block_data(const struct i2c_client *client, - u8 command, u8 *values); -extern s32 i2c_smbus_write_block_data(const struct i2c_client *client, - u8 command, u8 length, const u8 *values); +s32 i2c_smbus_read_block_data(const struct i2c_client *client, + u8 command, u8 *values); +s32 i2c_smbus_write_block_data(const struct i2c_client *client, + u8 command, u8 length, const u8 *values); /* Returns the number of read bytes */ -extern s32 i2c_smbus_read_i2c_block_data(const struct i2c_client *client, - u8 command, u8 length, u8 *values); -extern s32 i2c_smbus_write_i2c_block_data(const struct i2c_client *client, - u8 command, u8 length, - const u8 *values); -extern s32 -i2c_smbus_read_i2c_block_data_or_emulated(const struct i2c_client *client, - u8 command, u8 length, u8 *values); +s32 i2c_smbus_read_i2c_block_data(const struct i2c_client *client, + u8 command, u8 length, u8 *values); +s32 i2c_smbus_write_i2c_block_data(const struct i2c_client *client, + u8 command, u8 length, const u8 *values); +s32 i2c_smbus_read_i2c_block_data_or_emulated(const struct i2c_client *client, + u8 command, u8 length, + u8 *values); int i2c_get_device_id(const struct i2c_client *client, struct i2c_device_identity *id); #endif /* I2C */ @@ -337,10 +332,10 @@ struct i2c_client { }; #define to_i2c_client(d) container_of(d, struct i2c_client, dev) -extern struct i2c_client *i2c_verify_client(struct device *dev); -extern struct i2c_adapter *i2c_verify_adapter(struct device *dev); -extern const struct i2c_device_id *i2c_match_id(const struct i2c_device_id *id, - const struct i2c_client *client); +struct i2c_client *i2c_verify_client(struct device *dev); +struct i2c_adapter *i2c_verify_adapter(struct device *dev); +const struct i2c_device_id *i2c_match_id(const struct i2c_device_id *id, + const struct i2c_client *client); static inline struct i2c_client *kobj_to_i2c_client(struct kobject *kobj) { @@ -369,9 +364,9 @@ enum i2c_slave_event { I2C_SLAVE_STOP, }; -extern int i2c_slave_register(struct i2c_client *client, i2c_slave_cb_t slave_cb); -extern int i2c_slave_unregister(struct i2c_client *client); -extern bool i2c_detect_slave_mode(struct device *dev); +int i2c_slave_register(struct i2c_client *client, i2c_slave_cb_t slave_cb); +int i2c_slave_unregister(struct i2c_client *client); +bool i2c_detect_slave_mode(struct device *dev); static inline int i2c_slave_event(struct i2c_client *client, enum i2c_slave_event event, u8 *val) @@ -440,10 +435,10 @@ struct i2c_board_info { * with integrated I2C, a config eeprom, sensors, and a codec that's * used in conjunction with the primary hardware. */ -extern struct i2c_client * +struct i2c_client * i2c_new_device(struct i2c_adapter *adap, struct i2c_board_info const *info); -extern struct i2c_client * +struct i2c_client * i2c_new_client_device(struct i2c_adapter *adap, struct i2c_board_info const *info); /* If you don't know the exact address of an I2C device, use this variant @@ -452,33 +447,33 @@ i2c_new_client_device(struct i2c_adapter *adap, struct i2c_board_info const *inf * it must return 1 on successful probe, 0 otherwise. If it is not provided, * a default probing method is used. */ -extern struct i2c_client * +struct i2c_client * i2c_new_scanned_device(struct i2c_adapter *adap, struct i2c_board_info *info, unsigned short const *addr_list, int (*probe)(struct i2c_adapter *adap, unsigned short addr)); -extern struct i2c_client * +struct i2c_client * i2c_new_probed_device(struct i2c_adapter *adap, struct i2c_board_info *info, unsigned short const *addr_list, int (*probe)(struct i2c_adapter *adap, unsigned short addr)); /* Common custom probe functions */ -extern int i2c_probe_func_quick_read(struct i2c_adapter *adap, unsigned short addr); +int i2c_probe_func_quick_read(struct i2c_adapter *adap, unsigned short addr); -extern struct i2c_client * +struct i2c_client * i2c_new_dummy_device(struct i2c_adapter *adapter, u16 address); -extern struct i2c_client * +struct i2c_client * devm_i2c_new_dummy_device(struct device *dev, struct i2c_adapter *adap, u16 address); -extern struct i2c_client * +struct i2c_client * i2c_new_ancillary_device(struct i2c_client *client, - const char *name, - u16 default_addr); + const char *name, + u16 default_addr); -extern void i2c_unregister_device(struct i2c_client *client); +void i2c_unregister_device(struct i2c_client *client); #endif /* I2C */ /* Mainboard arch_initcall() code should register all its I2C devices. @@ -486,7 +481,7 @@ extern void i2c_unregister_device(struct i2c_client *client); * Modules for add-on boards must use other calls. */ #ifdef CONFIG_I2C_BOARDINFO -extern int +int i2c_register_board_info(int busnum, struct i2c_board_info const *info, unsigned n); #else @@ -840,12 +835,12 @@ static inline void i2c_mark_adapter_resumed(struct i2c_adapter *adap) /* administration... */ #if IS_ENABLED(CONFIG_I2C) -extern int i2c_add_adapter(struct i2c_adapter *adap); -extern void i2c_del_adapter(struct i2c_adapter *adap); -extern int i2c_add_numbered_adapter(struct i2c_adapter *adap); +int i2c_add_adapter(struct i2c_adapter *adap); +void i2c_del_adapter(struct i2c_adapter *adap); +int i2c_add_numbered_adapter(struct i2c_adapter *adap); -extern int i2c_register_driver(struct module *owner, struct i2c_driver *driver); -extern void i2c_del_driver(struct i2c_driver *driver); +int i2c_register_driver(struct module *owner, struct i2c_driver *driver); +void i2c_del_driver(struct i2c_driver *driver); /* use a define to avoid include chaining to get THIS_MODULE */ #define i2c_add_driver(driver) \ @@ -858,12 +853,12 @@ static inline bool i2c_client_has_driver(struct i2c_client *client) /* call the i2c_client->command() of all attached clients with * the given arguments */ -extern void i2c_clients_command(struct i2c_adapter *adap, - unsigned int cmd, void *arg); +void i2c_clients_command(struct i2c_adapter *adap, + unsigned int cmd, void *arg); -extern struct i2c_adapter *i2c_get_adapter(int nr); -extern void i2c_put_adapter(struct i2c_adapter *adap); -extern unsigned int i2c_adapter_depth(struct i2c_adapter *adapter); +struct i2c_adapter *i2c_get_adapter(int nr); +void i2c_put_adapter(struct i2c_adapter *adap); +unsigned int i2c_adapter_depth(struct i2c_adapter *adapter); void i2c_parse_fw_timings(struct device *dev, struct i2c_timings *t, bool use_defaults); @@ -935,15 +930,15 @@ int i2c_handle_smbus_host_notify(struct i2c_adapter *adap, unsigned short addr); #if IS_ENABLED(CONFIG_OF) /* must call put_device() when done with returned i2c_client device */ -extern struct i2c_client *of_find_i2c_device_by_node(struct device_node *node); +struct i2c_client *of_find_i2c_device_by_node(struct device_node *node); /* must call put_device() when done with returned i2c_adapter device */ -extern struct i2c_adapter *of_find_i2c_adapter_by_node(struct device_node *node); +struct i2c_adapter *of_find_i2c_adapter_by_node(struct device_node *node); /* must call i2c_put_adapter() when done with returned i2c_adapter device */ struct i2c_adapter *of_get_i2c_adapter_by_node(struct device_node *node); -extern const struct of_device_id +const struct of_device_id *i2c_of_match_device(const struct of_device_id *matches, struct i2c_client *client); diff --git a/include/linux/nvmem-provider.h b/include/linux/nvmem-provider.h index fe051323be0a..6d6f8e5d24c9 100644 --- a/include/linux/nvmem-provider.h +++ b/include/linux/nvmem-provider.h @@ -11,6 +11,7 @@ #include <linux/err.h> #include <linux/errno.h> +#include <linux/gpio/consumer.h> struct nvmem_device; struct nvmem_cell_info; @@ -45,6 +46,7 @@ enum nvmem_type { * @word_size: Minimum read/write access granularity. * @stride: Minimum read/write access stride. * @priv: User context passed to read/write callbacks. + * @wp-gpio: Write protect pin * * Note: A default "nvmem<id>" name will be assigned to the device if * no name is specified in its configuration. In such case "<id>" is @@ -58,6 +60,7 @@ struct nvmem_config { const char *name; int id; struct module *owner; + struct gpio_desc *wp_gpio; const struct nvmem_cell_info *cells; int ncells; enum nvmem_type type; |