David Brownell | 9c1600e | 2007-05-01 23:26:31 +0200 | [diff] [blame] | 1 | /* |
| 2 | * i2c-core.h - interfaces internal to the I2C framework |
| 3 | * |
| 4 | * This program is free software; you can redistribute it and/or modify |
| 5 | * it under the terms of the GNU General Public License as published by |
| 6 | * the Free Software Foundation; either version 2 of the License, or |
| 7 | * (at your option) any later version. |
| 8 | * |
| 9 | * This program is distributed in the hope that it will be useful, |
| 10 | * but WITHOUT ANY WARRANTY; without even the implied warranty of |
| 11 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
| 12 | * GNU General Public License for more details. |
David Brownell | 9c1600e | 2007-05-01 23:26:31 +0200 | [diff] [blame] | 13 | */ |
| 14 | |
Rodolfo Giometti | f18c41d | 2009-06-19 16:58:20 +0200 | [diff] [blame] | 15 | #include <linux/rwsem.h> |
| 16 | |
David Brownell | 9c1600e | 2007-05-01 23:26:31 +0200 | [diff] [blame] | 17 | struct i2c_devinfo { |
| 18 | struct list_head list; |
| 19 | int busnum; |
| 20 | struct i2c_board_info board_info; |
| 21 | }; |
| 22 | |
| 23 | /* board_lock protects board_list and first_dynamic_bus_num. |
| 24 | * only i2c core components are allowed to use these symbols. |
| 25 | */ |
Rodolfo Giometti | f18c41d | 2009-06-19 16:58:20 +0200 | [diff] [blame] | 26 | extern struct rw_semaphore __i2c_board_lock; |
David Brownell | 9c1600e | 2007-05-01 23:26:31 +0200 | [diff] [blame] | 27 | extern struct list_head __i2c_board_list; |
| 28 | extern int __i2c_first_dynamic_bus_num; |
| 29 | |
Wolfram Sang | 5bf4fa7 | 2017-05-23 11:50:58 +0200 | [diff] [blame] | 30 | int i2c_check_addr_validity(unsigned addr, unsigned short flags); |
Wolfram Sang | e4991ec | 2017-05-23 11:14:17 +0200 | [diff] [blame] | 31 | int i2c_check_7bit_addr_validity_strict(unsigned short addr); |
Wolfram Sang | 5bf4fa7 | 2017-05-23 11:50:58 +0200 | [diff] [blame] | 32 | |
Wolfram Sang | 53f8f7c | 2017-05-23 16:22:23 +0200 | [diff] [blame] | 33 | #ifdef CONFIG_ACPI |
Andy Shevchenko | c64ffff | 2017-07-17 17:13:28 +0300 | [diff] [blame] | 34 | const struct acpi_device_id * |
| 35 | i2c_acpi_match_device(const struct acpi_device_id *matches, |
| 36 | struct i2c_client *client); |
Wolfram Sang | 53f8f7c | 2017-05-23 16:22:23 +0200 | [diff] [blame] | 37 | void i2c_acpi_register_devices(struct i2c_adapter *adap); |
| 38 | #else /* CONFIG_ACPI */ |
| 39 | static inline void i2c_acpi_register_devices(struct i2c_adapter *adap) { } |
Andy Shevchenko | c64ffff | 2017-07-17 17:13:28 +0300 | [diff] [blame] | 40 | static inline const struct acpi_device_id * |
| 41 | i2c_acpi_match_device(const struct acpi_device_id *matches, |
| 42 | struct i2c_client *client) |
| 43 | { |
| 44 | return NULL; |
| 45 | } |
Wolfram Sang | 53f8f7c | 2017-05-23 16:22:23 +0200 | [diff] [blame] | 46 | #endif /* CONFIG_ACPI */ |
| 47 | extern struct notifier_block i2c_acpi_notifier; |
| 48 | |
| 49 | #ifdef CONFIG_ACPI_I2C_OPREGION |
| 50 | int i2c_acpi_install_space_handler(struct i2c_adapter *adapter); |
| 51 | void i2c_acpi_remove_space_handler(struct i2c_adapter *adapter); |
| 52 | #else /* CONFIG_ACPI_I2C_OPREGION */ |
| 53 | static inline int i2c_acpi_install_space_handler(struct i2c_adapter *adapter) { return 0; } |
| 54 | static inline void i2c_acpi_remove_space_handler(struct i2c_adapter *adapter) { } |
| 55 | #endif /* CONFIG_ACPI_I2C_OPREGION */ |
| 56 | |
Wolfram Sang | 5bf4fa7 | 2017-05-23 11:50:58 +0200 | [diff] [blame] | 57 | #ifdef CONFIG_OF |
| 58 | void of_i2c_register_devices(struct i2c_adapter *adap); |
| 59 | #else |
| 60 | static inline void of_i2c_register_devices(struct i2c_adapter *adap) { } |
| 61 | #endif |
| 62 | extern struct notifier_block i2c_of_notifier; |