Message ID | 58edd25a0fbe50b6d5abef14b7e46c63a1e06830.1484663257.git.lolivei@synopsys.com |
---|---|
State | Changes Requested |
Headers | show |
> + * i2c_slave_mode_detect - detect operation mode I'd rather name it 'i2c_detect_slave_mode' > + * @dev: The device owning the bus > + * > + * This checks the device nodes for an I2C slave by checking the address > + * used. > + * > + * Returns true if an I2C slave is detected, otherwise returns false. Both paragraphs could be a little more explicit. It is not about "slaves" or "clients" in general, but about those entries which make the current master act as a slave, too. The code looks good to me, so we are close to go! Thanks, Wolfram
On Wed, 2017-01-25 at 21:45 +0100, Wolfram Sang wrote: > > + * i2c_slave_mode_detect - detect operation mode > > I'd rather name it 'i2c_detect_slave_mode' When I proposed that I kept in ming `git grep -n i2c_slave`. > The code looks good to me, so we are close to go! Thumb up!
On Wed, Jan 25, 2017 at 10:50:09PM +0200, Andy Shevchenko wrote: > On Wed, 2017-01-25 at 21:45 +0100, Wolfram Sang wrote: > > > + * i2c_slave_mode_detect - detect operation mode > > > > I'd rather name it 'i2c_detect_slave_mode' > > When I proposed that I kept in ming `git grep -n i2c_slave`. "i2c.*slave"? :) I think having the verb first makes function names more comprehensible. i2c-core is not super consistent with that, but I'd say more follow this than not.
On Wed, Jan 25, 2017 at 11:01 PM, Wolfram Sang <wsa@the-dreams.de> wrote: > On Wed, Jan 25, 2017 at 10:50:09PM +0200, Andy Shevchenko wrote: >> On Wed, 2017-01-25 at 21:45 +0100, Wolfram Sang wrote: >> > > + * i2c_slave_mode_detect - detect operation mode >> > >> > I'd rather name it 'i2c_detect_slave_mode' >> >> When I proposed that I kept in ming `git grep -n i2c_slave`. > > "i2c.*slave"? :) 'i2c[a-z_]\+slave' > I think having the verb first makes function names more comprehensible. > i2c-core is not super consistent with that, but I'd say more follow this > than not. I'm okay with either.
On 25-Jan-17 20:45, Wolfram Sang wrote: > >> + * i2c_slave_mode_detect - detect operation mode > > I'd rather name it 'i2c_detect_slave_mode' I will do a V4 with this change. > >> + * @dev: The device owning the bus >> + * >> + * This checks the device nodes for an I2C slave by checking the address >> + * used. >> + * >> + * Returns true if an I2C slave is detected, otherwise returns false. > > Both paragraphs could be a little more explicit. It is not about > "slaves" or "clients" in general, but about those entries which make the > current master act as a slave, too. > Ok, I see your point of view. I will reword it also. > The code looks good to me, so we are close to go! > > Thanks, > > Wolfram > Great! Thanks -- To unsubscribe from this list: send the line "unsubscribe linux-i2c" in the body of a message to majordomo@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html
diff --git a/drivers/i2c/i2c-core.c b/drivers/i2c/i2c-core.c index 583e95042a21..30aa7b50b5bc 100644 --- a/drivers/i2c/i2c-core.c +++ b/drivers/i2c/i2c-core.c @@ -3690,6 +3690,36 @@ int i2c_slave_unregister(struct i2c_client *client) return ret; } EXPORT_SYMBOL_GPL(i2c_slave_unregister); + +/** + * i2c_slave_mode_detect - detect operation mode + * @dev: The device owning the bus + * + * This checks the device nodes for an I2C slave by checking the address + * used. + * + * Returns true if an I2C slave is detected, otherwise returns false. + */ +bool i2c_slave_mode_detect(struct device *dev) +{ + if (IS_BUILTIN(CONFIG_OF) && dev->of_node) { + struct device_node *child; + u32 reg; + + for_each_child_of_node(dev->of_node, child) { + of_property_read_u32(child, "reg", ®); + if (reg & I2C_OWN_SLAVE_ADDRESS) { + of_node_put(child); + return true; + } + } + } else if (IS_BUILTIN(CONFIG_ACPI) && ACPI_HANDLE(dev)) { + dev_dbg(dev, "ACPI slave is not supported yet\n"); + } + return false; +} +EXPORT_SYMBOL_GPL(i2c_slave_mode_detect); + #endif MODULE_AUTHOR("Simon G. Vogl <simon@tk.uni-linz.ac.at>"); diff --git a/include/linux/i2c.h b/include/linux/i2c.h index 4b45ec46161f..2e72e157826c 100644 --- a/include/linux/i2c.h +++ b/include/linux/i2c.h @@ -282,6 +282,7 @@ enum i2c_slave_event { 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_slave_mode_detect(struct device *dev); static inline int i2c_slave_event(struct i2c_client *client, enum i2c_slave_event event, u8 *val)