drm: adv7511: Add supply_names and num_supplies variables to struct adv7511_chip_info
authorBiju Das <biju.das.jz@bp.renesas.com>
Wed, 30 Aug 2023 14:23:54 +0000 (15:23 +0100)
committerRobert Foss <rfoss@kernel.org>
Mon, 16 Oct 2023 09:08:25 +0000 (11:08 +0200)
The ADV7511 has 5 power supplies compared to 7 that of ADV75{33,35}. Add
supply_names and num_supplies variables to struct adv7511_chip_info to
handle this difference.

Signed-off-by: Biju Das <biju.das.jz@bp.renesas.com>
Reviewed-by: Laurent Pinchart <laurent.pinchart+renesas@ideasonboard.com>
Reviewed-by: Robert Foss <rfoss@kernel.org>
Signed-off-by: Robert Foss <rfoss@kernel.org>
Link: https://patchwork.freedesktop.org/patch/msgid/20230830142358.275459-5-biju.das.jz@bp.renesas.com
drivers/gpu/drm/bridge/adv7511/adv7511.h
drivers/gpu/drm/bridge/adv7511/adv7511_drv.c

index f8d61f2fa30ef6ab9e8974beff95814d1b239ff9..edf7be9c21d3a1b652c5e51e7a3eeb613698cdc1 100644 (file)
@@ -337,6 +337,8 @@ struct adv7511_chip_info {
        enum adv7511_type type;
        unsigned int max_mode_clock_khz;
        unsigned int max_lane_freq_khz;
+       const char * const *supply_names;
+       unsigned int num_supplies;
 };
 
 struct adv7511 {
@@ -375,7 +377,6 @@ struct adv7511 {
        struct gpio_desc *gpio_pd;
 
        struct regulator_bulk_data *supplies;
-       unsigned int num_supplies;
 
        /* ADV7533 DSI RX related params */
        struct device_node *host_node;
index 4fff3e26e3d9a548a6fce36496566b3ef2f0cdc5..6c223f0eb4dc70e57702f0cc8f4e5be9f3dc76de 100644 (file)
@@ -1004,37 +1004,30 @@ static const char * const adv7533_supply_names[] = {
 
 static int adv7511_init_regulators(struct adv7511 *adv)
 {
+       const char * const *supply_names = adv->info->supply_names;
+       unsigned int num_supplies = adv->info->num_supplies;
        struct device *dev = &adv->i2c_main->dev;
-       const char * const *supply_names;
        unsigned int i;
        int ret;
 
-       if (adv->info->type == ADV7511) {
-               supply_names = adv7511_supply_names;
-               adv->num_supplies = ARRAY_SIZE(adv7511_supply_names);
-       } else {
-               supply_names = adv7533_supply_names;
-               adv->num_supplies = ARRAY_SIZE(adv7533_supply_names);
-       }
-
-       adv->supplies = devm_kcalloc(dev, adv->num_supplies,
+       adv->supplies = devm_kcalloc(dev, num_supplies,
                                     sizeof(*adv->supplies), GFP_KERNEL);
        if (!adv->supplies)
                return -ENOMEM;
 
-       for (i = 0; i < adv->num_supplies; i++)
+       for (i = 0; i < num_supplies; i++)
                adv->supplies[i].supply = supply_names[i];
 
-       ret = devm_regulator_bulk_get(dev, adv->num_supplies, adv->supplies);
+       ret = devm_regulator_bulk_get(dev, num_supplies, adv->supplies);
        if (ret)
                return ret;
 
-       return regulator_bulk_enable(adv->num_supplies, adv->supplies);
+       return regulator_bulk_enable(num_supplies, adv->supplies);
 }
 
 static void adv7511_uninit_regulators(struct adv7511 *adv)
 {
-       regulator_bulk_disable(adv->num_supplies, adv->supplies);
+       regulator_bulk_disable(adv->info->num_supplies, adv->supplies);
 }
 
 static bool adv7511_cec_register_volatile(struct device *dev, unsigned int reg)
@@ -1365,18 +1358,24 @@ static void adv7511_remove(struct i2c_client *i2c)
 
 static const struct adv7511_chip_info adv7511_chip_info = {
        .type = ADV7511,
+       .supply_names = adv7511_supply_names,
+       .num_supplies = ARRAY_SIZE(adv7511_supply_names),
 };
 
 static const struct adv7511_chip_info adv7533_chip_info = {
        .type = ADV7533,
        .max_mode_clock_khz = 80000,
        .max_lane_freq_khz = 800000,
+       .supply_names = adv7533_supply_names,
+       .num_supplies = ARRAY_SIZE(adv7533_supply_names),
 };
 
 static const struct adv7511_chip_info adv7535_chip_info = {
        .type = ADV7535,
        .max_mode_clock_khz = 148500,
        .max_lane_freq_khz = 891000,
+       .supply_names = adv7533_supply_names,
+       .num_supplies = ARRAY_SIZE(adv7533_supply_names),
 };
 
 static const struct i2c_device_id adv7511_i2c_ids[] = {