e5ca263508
Combining allocation and registration is an anti-pattern that should be avoided. Add two new functions for allocating and registering an dp-hpd bridge with a proper 'devm' prefix so that it is clear that these are device managed interfaces. devm_drm_dp_hpd_bridge_alloc() devm_drm_dp_hpd_bridge_add() The new interface will be used to fix a use-after-free bug in the Qualcomm PMIC GLINK driver and may prevent similar issues from being introduced elsewhere. The existing drm_dp_hpd_bridge_register() is reimplemented using the above and left in place for now. Signed-off-by: Johan Hovold <johan+linaro@kernel.org> Reviewed-by: Bjorn Andersson <andersson@kernel.org> Reviewed-by: Dmitry Baryshkov <dmitry.baryshkov@linaro.org> Signed-off-by: Dmitry Baryshkov <dmitry.baryshkov@linaro.org> Link: https://patchwork.freedesktop.org/patch/msgid/20240217150228.5788-3-johan+linaro@kernel.org
53 lines
1.3 KiB
C
53 lines
1.3 KiB
C
/* SPDX-License-Identifier: GPL-2.0+ */
|
|
/*
|
|
* Copyright (C) 2023 Linaro Ltd.
|
|
*
|
|
* Author: Dmitry Baryshkov <dmitry.baryshkov@linaro.org>
|
|
*/
|
|
#ifndef DRM_AUX_BRIDGE_H
|
|
#define DRM_AUX_BRIDGE_H
|
|
|
|
#include <drm/drm_connector.h>
|
|
|
|
struct auxiliary_device;
|
|
|
|
#if IS_ENABLED(CONFIG_DRM_AUX_BRIDGE)
|
|
int drm_aux_bridge_register(struct device *parent);
|
|
#else
|
|
static inline int drm_aux_bridge_register(struct device *parent)
|
|
{
|
|
return 0;
|
|
}
|
|
#endif
|
|
|
|
#if IS_ENABLED(CONFIG_DRM_AUX_HPD_BRIDGE)
|
|
struct auxiliary_device *devm_drm_dp_hpd_bridge_alloc(struct device *parent, struct device_node *np);
|
|
int devm_drm_dp_hpd_bridge_add(struct device *dev, struct auxiliary_device *adev);
|
|
struct device *drm_dp_hpd_bridge_register(struct device *parent,
|
|
struct device_node *np);
|
|
void drm_aux_hpd_bridge_notify(struct device *dev, enum drm_connector_status status);
|
|
#else
|
|
static inline struct auxiliary_device *devm_drm_dp_hpd_bridge_alloc(struct device *parent,
|
|
struct device_node *np)
|
|
{
|
|
return NULL;
|
|
}
|
|
|
|
static inline int devm_drm_dp_hpd_bridge_add(struct auxiliary_device *adev)
|
|
{
|
|
return 0;
|
|
}
|
|
|
|
static inline struct device *drm_dp_hpd_bridge_register(struct device *parent,
|
|
struct device_node *np)
|
|
{
|
|
return NULL;
|
|
}
|
|
|
|
static inline void drm_aux_hpd_bridge_notify(struct device *dev, enum drm_connector_status status)
|
|
{
|
|
}
|
|
#endif
|
|
|
|
#endif
|