Hi,

Fri, Nov 28, 2025 at 10:03:57AM +0800, Chaoyi Chen kirjoitti:
> diff --git a/drivers/gpu/drm/bridge/aux-hpd-typec-dp-bridge.c 
> b/drivers/gpu/drm/bridge/aux-hpd-typec-dp-bridge.c
> new file mode 100644
> index 000000000000..94be3d5f69e9
> --- /dev/null
> +++ b/drivers/gpu/drm/bridge/aux-hpd-typec-dp-bridge.c
> @@ -0,0 +1,51 @@
> +// SPDX-License-Identifier: GPL-2.0+
> +#include <linux/of.h>
> +#include <linux/usb/typec_altmode.h>
> +#include <linux/usb/typec_dp.h>
> +
> +#include <drm/bridge/aux-bridge.h>
> +
> +static int drm_typec_bus_event(struct notifier_block *nb,
> +                            unsigned long action, void *data)
> +{
> +     struct device *dev = (struct device *)data;
> +     struct typec_altmode *alt = to_typec_altmode(dev);
> +
> +     if (action != BUS_NOTIFY_ADD_DEVICE)
> +             goto done;
> +
> +     if (is_typec_partner_altmode(&alt->dev) || alt->svid != 
> USB_TYPEC_DP_SID)
> +             goto done;

There are also plug altmodes. Just make sure it's a plug altmode.

        if (!is_typec_plug_altmode(&alt->dev) || alt->svid != USB_TYPEC_DP_SID)
                goto done;

> +     /*
> +      * alt->dev.parent->parent : USB-C controller device
> +      * alt->dev.parent         : USB-C connector device
> +      */
> +     drm_dp_hpd_bridge_register(alt->dev.parent->parent,
> +                                to_of_node(alt->dev.parent->fwnode));
> +
> +done:
> +     return NOTIFY_OK;
> +}
> +
> +static struct notifier_block drm_typec_event_nb = {
> +     .notifier_call = drm_typec_bus_event,
> +};
> +
> +static void drm_aux_hpd_typec_dp_bridge_module_exit(void)
> +{
> +     bus_unregister_notifier(&typec_bus, &drm_typec_event_nb);
> +}
> +
> +static int __init drm_aux_hpd_typec_dp_bridge_module_init(void)
> +{
> +     bus_register_notifier(&typec_bus, &drm_typec_event_nb);
> +
> +     return 0;
> +}
> +
> +module_init(drm_aux_hpd_typec_dp_bridge_module_init);
> +module_exit(drm_aux_hpd_typec_dp_bridge_module_exit);
> +
> +MODULE_DESCRIPTION("DRM TYPEC DP HPD BRIDGE");
> +MODULE_LICENSE("GPL");

thanks,

-- 
heikki

Reply via email to