Groups | Search | Server Info | Keyboard shortcuts | Login | Register [http] [https] [nntp] [nntps]
Groups > linux.kernel > #1560644 > unrolled thread
| Started by | Luis Oliveira <Luis.Oliveira@synopsys.com> |
|---|---|
| First post | 2017-01-17 15:40 +0100 |
| Last post | 2017-01-26 13:00 +0100 |
| Articles | 6 — 4 participants |
Back to article view | Back to linux.kernel
[PATCH v3] i2c: core: helper function to detect slave mode Luis Oliveira <Luis.Oliveira@synopsys.com> - 2017-01-17 15:40 +0100
Re: [PATCH v3] i2c: core: helper function to detect slave mode Wolfram Sang <wsa@the-dreams.de> - 2017-01-25 21:50 +0100
Re: [PATCH v3] i2c: core: helper function to detect slave mode Andy Shevchenko <andriy.shevchenko@linux.intel.com> - 2017-01-25 22:00 +0100
Re: [PATCH v3] i2c: core: helper function to detect slave mode Wolfram Sang <wsa@the-dreams.de> - 2017-01-25 22:10 +0100
Re: [PATCH v3] i2c: core: helper function to detect slave mode Andy Shevchenko <andy.shevchenko@gmail.com> - 2017-01-25 22:40 +0100
Re: [PATCH v3] i2c: core: helper function to detect slave mode Luis Oliveira <Luis.Oliveira@synopsys.com> - 2017-01-26 13:00 +0100
| From | Luis Oliveira <Luis.Oliveira@synopsys.com> |
|---|---|
| Date | 2017-01-17 15:40 +0100 |
| Subject | [PATCH v3] i2c: core: helper function to detect slave mode |
| Message-ID | <t0D5v-8eI-5@gated-at.bofh.it> |
This function has the purpose of mode detection by checking the
device nodes for a reg matching with the I2C_OWN_SLAVE_ADDREESS flag.
Currently only checks using OF functions (ACPI slave not supported yet).
Signed-off-by: Luis Oliveira <lolivei@synopsys.com>
Suggested-by: Andy Shevchenko <andy.shevchenko@gmail.com>
Reviewed-by: Andy Shevchenko <andy.shevchenko@gmail.com>
---
Changes V2->V3: (@Vladimir)
- Bug Fix: «of_node_put(child)» added.
drivers/i2c/i2c-core.c | 30 ++++++++++++++++++++++++++++++
include/linux/i2c.h | 1 +
2 files changed, 31 insertions(+)
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)
--
2.11.0
[toc] | [next] | [standalone]
| From | Wolfram Sang <wsa@the-dreams.de> |
|---|---|
| Date | 2017-01-25 21:50 +0100 |
| Message-ID | <t3CFY-6Do-9@gated-at.bofh.it> |
| In reply to | #1560644 |
[Multipart message — attachments visible in raw view] — view raw
> + * 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
[toc] | [prev] | [next] | [standalone]
| From | Andy Shevchenko <andriy.shevchenko@linux.intel.com> |
|---|---|
| Date | 2017-01-25 22:00 +0100 |
| Message-ID | <t3CPD-6GU-3@gated-at.bofh.it> |
| In reply to | #1566938 |
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! -- Andy Shevchenko <andriy.shevchenko@linux.intel.com> Intel Finland Oy
[toc] | [prev] | [next] | [standalone]
| From | Wolfram Sang <wsa@the-dreams.de> |
|---|---|
| Date | 2017-01-25 22:10 +0100 |
| Message-ID | <t3CZk-6Zx-27@gated-at.bofh.it> |
| In reply to | #1566943 |
[Multipart message — attachments visible in raw view] — view raw
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.
[toc] | [prev] | [next] | [standalone]
| From | Andy Shevchenko <andy.shevchenko@gmail.com> |
|---|---|
| Date | 2017-01-25 22:40 +0100 |
| Message-ID | <t3Dsn-79W-27@gated-at.bofh.it> |
| In reply to | #1566953 |
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. -- With Best Regards, Andy Shevchenko
[toc] | [prev] | [next] | [standalone]
| From | Luis Oliveira <Luis.Oliveira@synopsys.com> |
|---|---|
| Date | 2017-01-26 13:00 +0100 |
| Message-ID | <t3QSB-6QS-11@gated-at.bofh.it> |
| In reply to | #1566938 |
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
[toc] | [prev] | [standalone]
Back to top | Article view | linux.kernel
csiph-web