Skip to content

Commit

Permalink
drm/hisilicon/hibmc: refactored struct hibmc_drm_private
Browse files Browse the repository at this point in the history
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>
  • Loading branch information
Baihan Li authored and Dmitry Baryshkov committed Jan 3, 2025
1 parent 94ee73e commit 587013d
Show file tree
Hide file tree
Showing 3 changed files with 38 additions and 39 deletions.
16 changes: 8 additions & 8 deletions drivers/gpu/drm/hisilicon/hibmc/hibmc_drm_drv.h
Original file line number Diff line number Diff line change
Expand Up @@ -20,9 +20,10 @@

#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;
};
Expand All @@ -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)
Expand All @@ -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
41 changes: 20 additions & 21 deletions drivers/gpu/drm/hisilicon/hibmc/hibmc_drm_i2c.c
Original file line number Diff line number Diff line change
Expand Up @@ -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) {
Expand All @@ -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) {
Expand Down Expand Up @@ -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);
}
20 changes: 10 additions & 10 deletions drivers/gpu/drm/hisilicon/hibmc/hibmc_drm_vdac.c
Original file line number Diff line number Diff line change
Expand Up @@ -24,11 +24,11 @@

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);

Expand All @@ -51,9 +51,9 @@ static int hibmc_connector_get_modes(struct drm_connector *connector)

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);
}

Expand Down Expand Up @@ -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;
Expand All @@ -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;
Expand Down

0 comments on commit 587013d

Please sign in to comment.