From: Dmitry Torokhov <dmitry.torokhov@gmail.com>
To: Geert Uytterhoeven <geert@linux-m68k.org>
Cc: Biju Das <biju.das.jz@bp.renesas.com>,
Wolfram Sang <wsa@kernel.org>,
"linux-i2c@vger.kernel.org" <linux-i2c@vger.kernel.org>,
"linux-renesas-soc@vger.kernel.org"
<linux-renesas-soc@vger.kernel.org>
Subject: Re: [PATCH RFC 2/2] i2c: Add i2c_device_get_match_data() callback
Date: Mon, 24 Jul 2023 09:47:56 -0700 [thread overview]
Message-ID: <ZL6rPKt+KFDBEK+/@google.com> (raw)
In-Reply-To: <CAMuHMdWtajSfa91Yg6codr8rVTvkWWykUgs=mDuS9hfsRbnAiQ@mail.gmail.com>
On Mon, Jul 24, 2023 at 06:43:30PM +0200, Geert Uytterhoeven wrote:
> Hi Dmitry,
>
> On Mon, Jul 24, 2023 at 6:35 PM Dmitry Torokhov
> <dmitry.torokhov@gmail.com> wrote:
> > On Mon, Jul 24, 2023 at 03:06:50PM +0000, Biju Das wrote:
> > > > Subject: Re: [PATCH RFC 2/2] i2c: Add i2c_device_get_match_data()
> > > > callback
> > > > On Sun, Jul 23, 2023 at 10:37 AM Biju Das <biju.das.jz@bp.renesas.com>
> > > > wrote:
> > > > > Add i2c_device_get_match_data() callback to struct bus_type().
> > > > >
> > > > > While at it, introduced i2c_get_match_data_helper() to avoid code
> > > > > duplication with i2c_get_match_data().
> > > > >
> > > > > Signed-off-by: Dmitry Torokhov <dmitry.torokhov@gmail.com>
> > > > > Signed-off-by: Biju Das <biju.das.jz@bp.renesas.com>
> > > >
> > > > Thanks for your patch!
> > > >
> > > > > --- a/drivers/i2c/i2c-core-base.c
> > > > > +++ b/drivers/i2c/i2c-core-base.c
> > > > > @@ -114,20 +114,41 @@ const struct i2c_device_id *i2c_match_id(const
> > > > > struct i2c_device_id *id, } EXPORT_SYMBOL_GPL(i2c_match_id);
> > > > >
> > > > > +static void *i2c_get_match_data_helper(struct i2c_driver *driver,
> > > >
> > > > static const void *
> > >
> > > I missed this.
> > >
> > > >
> > > > > + const struct i2c_client
> > > > > +*client) {
> > > > > + const struct i2c_device_id *match;
> > > > > +
> > > > > + match = i2c_match_id(driver->id_table, client);
> > > > > + if (!match)
> > > > > + return NULL;
> > > > > +
> > > > > + return (const void *)match->driver_data;
> > > >
> > > > I guess your compiler didn't complain about the const/non-const
> > > > conversion when returning because it inlined the function?
> > >
> > > It complained. Somehow, I didn't notice that warning before sending the patch.
> > >
> > > >
> > > > > +}
> > > > > +
> > > > > +static const void *i2c_device_get_match_data(const struct device
> > > > > +*dev) {
> > > > > + const struct i2c_client *client = to_i2c_client(dev);
> > >
> > > Not sure, non-const i2c_verify_client(dev)to be used here??
> >
> > Good call, it actually should, as i2c bus contains instances of both
> > i2c_client and i2c_adapter.
> >
> > Unfortunately i2c_verify_client() right now is a function, we might need
> > to turn it into a macro to allow transparently handle const/non-const
> > device argument... If this is too hard at the moment we could open-code
> > i2c_verify_client() in i2c_device_get_match_data() and first check on
> > the device type before doing to_i2c_client() conversion.
>
> Tadah, we have _Generic()! See container_of_const():
> https://elixir.bootlin.com/linux/latest/source/include/linux/container_of.h#L25
I think we might want to go through all buses and switch to_XXX()
implementations there to use container_of_const() instead of old
container_of() there.
This still does not help with i2c_verify_client() being currently a
function, so it still needs to be converted to a macro to be able to
return const and nont-const pointers, depending on the argument type.
Thanks.
--
Dmitry
prev parent reply other threads:[~2023-07-24 16:48 UTC|newest]
Thread overview: 26+ messages / expand[flat|nested] mbox.gz Atom feed top
2023-07-23 8:37 [PATCH RFC 0/2] Extend device_get_match_data() to struct bus_type Biju Das
2023-07-23 8:37 ` [PATCH RFC 1/2] drivers: fwnode: " Biju Das
2023-07-24 11:06 ` Andy Shevchenko
2023-07-24 11:07 ` Andy Shevchenko
2023-07-24 11:46 ` Biju Das
2023-07-24 12:57 ` Andy Shevchenko
2023-07-24 13:35 ` Biju Das
2023-07-24 12:02 ` Biju Das
2023-07-24 13:00 ` Andy Shevchenko
2023-07-24 13:19 ` Biju Das
2023-07-24 13:50 ` Andy Shevchenko
2023-07-24 13:58 ` Biju Das
2023-07-24 16:38 ` Dmitry Torokhov
2023-07-26 5:33 ` Biju Das
2023-07-23 8:37 ` [PATCH RFC 2/2] i2c: Add i2c_device_get_match_data() callback Biju Das
2023-07-23 11:18 ` kernel test robot
2023-07-23 11:41 ` Biju Das
2023-07-23 11:28 ` kernel test robot
2023-07-23 11:42 ` Biju Das
2023-07-23 14:03 ` kernel test robot
2023-07-23 20:08 ` Dmitry Torokhov
2023-07-24 14:55 ` Geert Uytterhoeven
2023-07-24 15:06 ` Biju Das
2023-07-24 16:34 ` Dmitry Torokhov
2023-07-24 16:43 ` Geert Uytterhoeven
2023-07-24 16:47 ` Dmitry Torokhov [this message]
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=ZL6rPKt+KFDBEK+/@google.com \
--to=dmitry.torokhov@gmail.com \
--cc=biju.das.jz@bp.renesas.com \
--cc=geert@linux-m68k.org \
--cc=linux-i2c@vger.kernel.org \
--cc=linux-renesas-soc@vger.kernel.org \
--cc=wsa@kernel.org \
/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
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.