]> git.ipfire.org Git - thirdparty/kernel/linux.git/commitdiff
drm/hisilicon/hibmc: refactored struct hibmc_drm_private
authorBaihan Li <libaihan@huawei.com>
Fri, 3 Jan 2025 09:38:23 +0000 (17:38 +0800)
committerDmitry Baryshkov <dmitry.baryshkov@linaro.org>
Fri, 3 Jan 2025 10:42:10 +0000 (12:42 +0200)
Refactored struct hibmc_drm_private to separate VGA module from
generic struct.

Signed-off-by: Baihan Li <libaihan@huawei.com>
Signed-off-by: Yongbang Shi <shiyongbang@huawei.com>
Reviewed-by: Dmitry Baryshkov <dmitry.baryshkov@linaro.org>
Reviewed-by: Tian Tao <tiantao6@hisilicon.com>
Link: https://patchwork.freedesktop.org/patch/msgid/20250103093824.1963816-5-shiyongbang@huawei.com
Signed-off-by: Dmitry Baryshkov <dmitry.baryshkov@linaro.org>
drivers/gpu/drm/hisilicon/hibmc/hibmc_drm_drv.h
drivers/gpu/drm/hisilicon/hibmc/hibmc_drm_i2c.c
drivers/gpu/drm/hisilicon/hibmc/hibmc_drm_vdac.c

index 6b566f3aeecbcac81d44c78720ed9c0bc4f75398..42f0ab8f9b5a4de900de77978e0d059936a0c637 100644 (file)
 
 #include <drm/drm_framebuffer.h>
 
-struct hibmc_connector {
-       struct drm_connector base;
-
+struct hibmc_vdac {
+       struct drm_device *dev;
+       struct drm_encoder encoder;
+       struct drm_connector connector;
        struct i2c_adapter adapter;
        struct i2c_algo_bit_data bit_data;
 };
@@ -35,13 +36,12 @@ struct hibmc_drm_private {
        struct drm_device dev;
        struct drm_plane primary_plane;
        struct drm_crtc crtc;
-       struct drm_encoder encoder;
-       struct hibmc_connector connector;
+       struct hibmc_vdac vdac;
 };
 
-static inline struct hibmc_connector *to_hibmc_connector(struct drm_connector *connector)
+static inline struct hibmc_vdac *to_hibmc_vdac(struct drm_connector *connector)
 {
-       return container_of(connector, struct hibmc_connector, base);
+       return container_of(connector, struct hibmc_vdac, connector);
 }
 
 static inline struct hibmc_drm_private *to_hibmc_drm_private(struct drm_device *dev)
@@ -57,6 +57,6 @@ void hibmc_set_current_gate(struct hibmc_drm_private *priv,
 int hibmc_de_init(struct hibmc_drm_private *priv);
 int hibmc_vdac_init(struct hibmc_drm_private *priv);
 
-int hibmc_ddc_create(struct drm_device *drm_dev, struct hibmc_connector *connector);
+int hibmc_ddc_create(struct drm_device *drm_dev, struct hibmc_vdac *connector);
 
 #endif
index e6e48651c15c63550bbdb79d9742ba21ba26506b..99b3b77b5445f6a5a6f8cd2e8a3efb5eaa709bf2 100644 (file)
@@ -25,8 +25,8 @@
 
 static void hibmc_set_i2c_signal(void *data, u32 mask, int value)
 {
-       struct hibmc_connector *hibmc_connector = data;
-       struct hibmc_drm_private *priv = to_hibmc_drm_private(hibmc_connector->base.dev);
+       struct hibmc_vdac *vdac = data;
+       struct hibmc_drm_private *priv = to_hibmc_drm_private(vdac->connector.dev);
        u32 tmp_dir = readl(priv->mmio + GPIO_DATA_DIRECTION);
 
        if (value) {
@@ -45,8 +45,8 @@ static void hibmc_set_i2c_signal(void *data, u32 mask, int value)
 
 static int hibmc_get_i2c_signal(void *data, u32 mask)
 {
-       struct hibmc_connector *hibmc_connector = data;
-       struct hibmc_drm_private *priv = to_hibmc_drm_private(hibmc_connector->base.dev);
+       struct hibmc_vdac *vdac = data;
+       struct hibmc_drm_private *priv = to_hibmc_drm_private(vdac->connector.dev);
        u32 tmp_dir = readl(priv->mmio + GPIO_DATA_DIRECTION);
 
        if ((tmp_dir & mask) != mask) {
@@ -77,22 +77,21 @@ static int hibmc_ddc_getscl(void *data)
        return hibmc_get_i2c_signal(data, I2C_SCL_MASK);
 }
 
-int hibmc_ddc_create(struct drm_device *drm_dev,
-                    struct hibmc_connector *connector)
+int hibmc_ddc_create(struct drm_device *drm_dev, struct hibmc_vdac *vdac)
 {
-       connector->adapter.owner = THIS_MODULE;
-       snprintf(connector->adapter.name, I2C_NAME_SIZE, "HIS i2c bit bus");
-       connector->adapter.dev.parent = drm_dev->dev;
-       i2c_set_adapdata(&connector->adapter, connector);
-       connector->adapter.algo_data = &connector->bit_data;
-
-       connector->bit_data.udelay = 20;
-       connector->bit_data.timeout = usecs_to_jiffies(2000);
-       connector->bit_data.data = connector;
-       connector->bit_data.setsda = hibmc_ddc_setsda;
-       connector->bit_data.setscl = hibmc_ddc_setscl;
-       connector->bit_data.getsda = hibmc_ddc_getsda;
-       connector->bit_data.getscl = hibmc_ddc_getscl;
-
-       return i2c_bit_add_bus(&connector->adapter);
+       vdac->adapter.owner = THIS_MODULE;
+       snprintf(vdac->adapter.name, I2C_NAME_SIZE, "HIS i2c bit bus");
+       vdac->adapter.dev.parent = drm_dev->dev;
+       i2c_set_adapdata(&vdac->adapter, vdac);
+       vdac->adapter.algo_data = &vdac->bit_data;
+
+       vdac->bit_data.udelay = 20;
+       vdac->bit_data.timeout = usecs_to_jiffies(2000);
+       vdac->bit_data.data = vdac;
+       vdac->bit_data.setsda = hibmc_ddc_setsda;
+       vdac->bit_data.setscl = hibmc_ddc_setscl;
+       vdac->bit_data.getsda = hibmc_ddc_getsda;
+       vdac->bit_data.getscl = hibmc_ddc_getscl;
+
+       return i2c_bit_add_bus(&vdac->adapter);
 }
index 409c551c92af8ce7274825e161e911df45fc25e3..05e19ea4c9f9edf02925712d65d138e1c2e813e7 100644 (file)
 
 static int hibmc_connector_get_modes(struct drm_connector *connector)
 {
-       struct hibmc_connector *hibmc_connector = to_hibmc_connector(connector);
+       struct hibmc_vdac *vdac = to_hibmc_vdac(connector);
        const struct drm_edid *drm_edid;
        int count;
 
-       drm_edid = drm_edid_read_ddc(connector, &hibmc_connector->adapter);
+       drm_edid = drm_edid_read_ddc(connector, &vdac->adapter);
 
        drm_edid_connector_update(connector, drm_edid);
 
@@ -51,9 +51,9 @@ out:
 
 static void hibmc_connector_destroy(struct drm_connector *connector)
 {
-       struct hibmc_connector *hibmc_connector = to_hibmc_connector(connector);
+       struct hibmc_vdac *vdac = to_hibmc_vdac(connector);
 
-       i2c_del_adapter(&hibmc_connector->adapter);
+       i2c_del_adapter(&vdac->adapter);
        drm_connector_cleanup(connector);
 }
 
@@ -93,20 +93,20 @@ static const struct drm_encoder_helper_funcs hibmc_encoder_helper_funcs = {
 int hibmc_vdac_init(struct hibmc_drm_private *priv)
 {
        struct drm_device *dev = &priv->dev;
-       struct hibmc_connector *hibmc_connector = &priv->connector;
-       struct drm_encoder *encoder = &priv->encoder;
+       struct hibmc_vdac *vdac = &priv->vdac;
+       struct drm_encoder *encoder = &vdac->encoder;
        struct drm_crtc *crtc = &priv->crtc;
-       struct drm_connector *connector = &hibmc_connector->base;
+       struct drm_connector *connector = &vdac->connector;
        int ret;
 
-       ret = hibmc_ddc_create(dev, hibmc_connector);
+       ret = hibmc_ddc_create(dev, vdac);
        if (ret) {
                drm_err(dev, "failed to create ddc: %d\n", ret);
                return ret;
        }
 
        encoder->possible_crtcs = drm_crtc_mask(crtc);
-       ret = drm_simple_encoder_init(dev, encoder, DRM_MODE_ENCODER_DAC);
+       ret = drmm_encoder_init(dev, encoder, NULL, DRM_MODE_ENCODER_DAC, NULL);
        if (ret) {
                drm_err(dev, "failed to init encoder: %d\n", ret);
                return ret;
@@ -117,7 +117,7 @@ int hibmc_vdac_init(struct hibmc_drm_private *priv)
        ret = drm_connector_init_with_ddc(dev, connector,
                                          &hibmc_connector_funcs,
                                          DRM_MODE_CONNECTOR_VGA,
-                                         &hibmc_connector->adapter);
+                                         &vdac->adapter);
        if (ret) {
                drm_err(dev, "failed to init connector: %d\n", ret);
                return ret;