Re: [PATCH 1/4] ASoC: hdmi-codec: Add an op to set callback function for plug event

From: Cheng-yi Chiang
Date: Tue Jul 09 2019 - 07:59:26 EST


On Mon, Jul 8, 2019 at 1:03 PM Cheng-yi Chiang <cychiang@xxxxxxxxxxxx> wrote:
>
> On Fri, Jul 5, 2019 at 8:12 PM Mark Brown <broonie@xxxxxxxxxx> wrote:
> >
> > On Fri, Jul 05, 2019 at 03:08:37PM +0800, Tzung-Bi Shih wrote:
> > > On Fri, Jul 5, 2019 at 12:26 PM Cheng-Yi Chiang <cychiang@xxxxxxxxxxxx> wrote:
> >
> > > > +typedef void (*hdmi_codec_plugged_cb)(struct platform_device *dev,
> > > > + bool plugged);
> > > > +
> >
> > > The callback prototype is "weird" by struct platform_device. Is it
> > > possible to having snd_soc_component instead of platform_device?
> >
> > Or if it's got to be a device why not just a generic device so
> > we're not tied to a particular bus here?
>
> My intention was to invoke the call in dw-hdmi.c like this:
>
> hdmi->plugged_cb(hdmi->audio,
> result == connector_status_connected);
>
> Here hdmi->audio is a platform_device.
> I think dw-hdmi can not get snd_soc_component easily.
> I can use a generic device here so the ops is more general.
> The calling will be like
> hdmi->plugged_cb(&hdmi->audio->dev,
> result == connector_status_connected);
> I will update this in v2.
> Thanks!

I have thought about this a bit more. And I think the more proper
interface is to pass in a generic struct device* for codec.
This way, the user of hdmi-codec driver on the DRM side is not limited
to the relation chain of
audio platform device -> codec platform device, which is just a
special case in dw-hdmi driver.
As long as DRM side can get hdmi-codec device pointer through
drv_data, it can use this callback.
Hope this makes the interface more generic.