From: Luca Ceresoli <luca@lucaceresoli.net> To: linux-media@vger.kernel.org, linux-i2c@vger.kernel.org Cc: Luca Ceresoli <luca@lucaceresoli.net>, devicetree@vger.kernel.org, linux-kernel@vger.kernel.org, Mauro Carvalho Chehab <mchehab@kernel.org>, Rob Herring <robh+dt@kernel.org>, Mark Rutland <mark.rutland@arm.com>, Wolfram Sang <wsa@the-dreams.de>, Sakari Ailus <sakari.ailus@linux.intel.com>, Hans Verkuil <hverkuil-cisco@xs4all.nl>, Laurent Pinchart <laurent.pinchart@ideasonboard.com>, Kieran Bingham <kieran.bingham@ideasonboard.com>, Jacopo Mondi <jacopo@jmondi.org>, Vladimir Zapolskiy <vz@mleia.com>, Peter Rosin <peda@axentia.se> Subject: [RFC,v2 1/6] i2c: core: let adapters be notified of client attach/detach Date: Tue, 23 Jul 2019 22:37:18 +0200 Message-ID: <20190723203723.11730-2-luca@lucaceresoli.net> (raw) In-Reply-To: <20190723203723.11730-1-luca@lucaceresoli.net> An adapter might need to know when a new device is about to be added. This will soon bee needed to implement an "I2C address translator" (ATR for short), a device that propagates I2C transactions with a different slave address (an "alias" address). An ATR driver needs to know when a slave is being added to find a suitable alias and program the device translation map. Add an attach/detach callback pair to allow adapter drivers to be notified of clients being added and removed. Signed-off-by: Luca Ceresoli <luca@lucaceresoli.net> --- Changes RFCv1 -> RFCv2: - Document struct i2c_attach_operations --- drivers/i2c/i2c-core-base.c | 16 ++++++++++++++++ include/linux/i2c.h | 16 ++++++++++++++++ 2 files changed, 32 insertions(+) diff --git a/drivers/i2c/i2c-core-base.c b/drivers/i2c/i2c-core-base.c index f26ed495d384..c08ca4bca9c1 100644 --- a/drivers/i2c/i2c-core-base.c +++ b/drivers/i2c/i2c-core-base.c @@ -776,6 +776,11 @@ i2c_new_client_device(struct i2c_adapter *adap, struct i2c_board_info const *inf } } + if (adap->attach_ops && + adap->attach_ops->attach_client && + adap->attach_ops->attach_client(adap, info, client) != 0) + goto err_attach_client; + status = device_register(&client->dev); if (status) goto out_free_props; @@ -786,6 +791,9 @@ i2c_new_client_device(struct i2c_adapter *adap, struct i2c_board_info const *inf return client; out_free_props: + if (adap->attach_ops && adap->attach_ops->detach_client) + adap->attach_ops->detach_client(adap, client); +err_attach_client: if (info->properties) device_remove_properties(&client->dev); out_err_put_of_node: @@ -832,9 +840,17 @@ EXPORT_SYMBOL_GPL(i2c_new_device); */ void i2c_unregister_device(struct i2c_client *client) { + struct i2c_adapter *adap; + if (!client) return; + adap = client->adapter; + + if (adap->attach_ops && + adap->attach_ops->detach_client) + adap->attach_ops->detach_client(adap, client); + if (client->dev.of_node) { of_node_clear_flag(client->dev.of_node, OF_POPULATED); of_node_put(client->dev.of_node); diff --git a/include/linux/i2c.h b/include/linux/i2c.h index fa5552c2307b..ebc372a0e537 100644 --- a/include/linux/i2c.h +++ b/include/linux/i2c.h @@ -567,6 +567,21 @@ struct i2c_lock_operations { void (*unlock_bus)(struct i2c_adapter *adapter, unsigned int flags); }; +/** + * struct i2c_attach_operations - callbacks to notify client attach/detach + * @attach_client: Notify of new client being attached + * @detach_client: Notify of new client being detached + * + * Both ops are optional. + */ +struct i2c_attach_operations { + int (*attach_client)(struct i2c_adapter *adapter, + const struct i2c_board_info *info, + const struct i2c_client *client); + void (*detach_client)(struct i2c_adapter *adapter, + const struct i2c_client *client); +}; + /** * struct i2c_timings - I2C timing information * @bus_freq_hz: the bus frequency in Hz @@ -690,6 +705,7 @@ struct i2c_adapter { /* data fields that are valid for all devices */ const struct i2c_lock_operations *lock_ops; + const struct i2c_attach_operations *attach_ops; struct rt_mutex bus_lock; struct rt_mutex mux_lock; -- 2.17.1
next prev parent reply index Thread overview: 34+ messages / expand[flat|nested] mbox.gz Atom feed top 2019-07-23 20:37 [RFC,v2 0/6] TI camera serdes and I2C address translation Luca Ceresoli 2019-07-23 20:37 ` Luca Ceresoli [this message] 2019-07-23 20:37 ` [RFC,v2 2/6] i2c: add I2C Address Translator (ATR) support Luca Ceresoli 2019-09-01 14:31 ` jacopo mondi 2019-09-03 7:31 ` Luca Ceresoli 2019-09-03 7:37 ` Wolfram Sang 2019-09-04 8:09 ` Peter Rosin 2019-09-08 19:40 ` Luca Ceresoli 2019-09-10 18:46 ` Wolfram Sang 2019-09-08 20:45 ` Vladimir Zapolskiy 2019-09-09 4:56 ` Vladimir Zapolskiy 2019-09-10 17:40 ` Luca Ceresoli 2019-09-09 7:22 ` Wolfram Sang 2019-09-09 15:10 ` Vladimir Zapolskiy 2019-09-09 17:48 ` Luca Ceresoli 2019-09-10 17:16 ` Wolfram Sang 2019-09-02 20:42 ` Wolfram Sang 2019-09-03 8:48 ` Luca Ceresoli 2019-09-03 9:06 ` Wolfram Sang 2019-07-23 20:37 ` [RFC,v2 3/6] media: dt-bindings: add DS90UB954-Q1 video deserializer Luca Ceresoli 2019-08-13 15:44 ` Rob Herring 2019-08-19 22:41 ` Luca Ceresoli 2019-08-20 15:44 ` Rob Herring 2019-08-21 21:50 ` Luca Ceresoli 2019-09-02 20:48 ` Wolfram Sang 2019-09-03 9:09 ` Luca Ceresoli 2019-09-03 9:34 ` Wolfram Sang 2019-09-03 11:03 ` Luca Ceresoli 2019-09-03 14:16 ` Wolfram Sang 2019-09-10 9:43 ` Sakari Ailus 2019-09-10 15:02 ` Luca Ceresoli 2019-07-23 20:37 ` [RFC,v2 4/6] media: dt-bindings: add DS90UB953-Q1 video serializer Luca Ceresoli 2019-07-23 20:37 ` [RFC,v2 5/6] media: ds90ub954: new driver for TI DS90UB954-Q1 video deserializer Luca Ceresoli 2019-07-23 20:37 ` [RFC,v2 6/6] media: ds90ub953: new driver for TI DS90UB953-Q1 video serializer Luca Ceresoli
Reply instructions: You may reply publicly to this message via plain-text email using any one of the following methods: * Save the following mbox file, import it into your mail client, and reply-to-all from there: mbox Avoid top-posting and favor interleaved quoting: https://en.wikipedia.org/wiki/Posting_style#Interleaved_style * Reply using the --to, --cc, and --in-reply-to switches of git-send-email(1): git send-email \ --in-reply-to=20190723203723.11730-2-luca@lucaceresoli.net \ --to=luca@lucaceresoli.net \ --cc=devicetree@vger.kernel.org \ --cc=hverkuil-cisco@xs4all.nl \ --cc=jacopo@jmondi.org \ --cc=kieran.bingham@ideasonboard.com \ --cc=laurent.pinchart@ideasonboard.com \ --cc=linux-i2c@vger.kernel.org \ --cc=linux-kernel@vger.kernel.org \ --cc=linux-media@vger.kernel.org \ --cc=mark.rutland@arm.com \ --cc=mchehab@kernel.org \ --cc=peda@axentia.se \ --cc=robh+dt@kernel.org \ --cc=sakari.ailus@linux.intel.com \ --cc=vz@mleia.com \ --cc=wsa@the-dreams.de \ /path/to/YOUR_REPLY https://kernel.org/pub/software/scm/git/docs/git-send-email.html * If your mail client supports setting the In-Reply-To header via mailto: links, try the mailto: link
Linux-Media Archive on lore.kernel.org Archives are clonable: git clone --mirror https://lore.kernel.org/linux-media/0 linux-media/git/0.git # If you have public-inbox 1.1+ installed, you may # initialize and index your mirror using the following commands: public-inbox-init -V2 linux-media linux-media/ https://lore.kernel.org/linux-media \ linux-media@vger.kernel.org public-inbox-index linux-media Example config snippet for mirrors Newsgroup available over NNTP: nntp://nntp.lore.kernel.org/org.kernel.vger.linux-media AGPL code for this site: git clone https://public-inbox.org/public-inbox.git