On Mon, Jul 8, 2019 at 1:03 PM Cheng-yi Chiang cychiang@chromium.org wrote:
On Fri, Jul 5, 2019 at 8:12 PM Mark Brown broonie@kernel.org 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@chromium.org 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.