diff options
Diffstat (limited to 'recipes-kernel/linux/linux-toradex-upstream-6.6/0002-drm-bridge-lt8912b-Add-power-supplies.patch')
-rw-r--r-- | recipes-kernel/linux/linux-toradex-upstream-6.6/0002-drm-bridge-lt8912b-Add-power-supplies.patch | 92 |
1 files changed, 92 insertions, 0 deletions
diff --git a/recipes-kernel/linux/linux-toradex-upstream-6.6/0002-drm-bridge-lt8912b-Add-power-supplies.patch b/recipes-kernel/linux/linux-toradex-upstream-6.6/0002-drm-bridge-lt8912b-Add-power-supplies.patch new file mode 100644 index 0000000..e4a81b3 --- /dev/null +++ b/recipes-kernel/linux/linux-toradex-upstream-6.6/0002-drm-bridge-lt8912b-Add-power-supplies.patch @@ -0,0 +1,92 @@ +From f6d8a80f1d10ff01cff3ac26e242165a270bbbad Mon Sep 17 00:00:00 2001 +From: Stefan Eichenberger <stefan.eichenberger@toradex.com> +Date: Wed, 15 Nov 2023 13:13:38 +0100 +Subject: [PATCH] drm/bridge: lt8912b: Add power supplies + +Add supplies to the driver that can be used to turn the Lontium lt8912b +on and off. It can have up to 7 independent supplies, we add them all +and enable/disable them with bulk_enable/disable. + +Upstream-Status: Backport [f168c7f7d1a0cb12a4888af9f3f907139372f137] + +Signed-off-by: Stefan Eichenberger <stefan.eichenberger@toradex.com> +Signed-off-by: Francesco Dolcini <francesco.dolcini@toradex.com> +Reviewed-by: Robert Foss <rfoss@kernel.org> +Signed-off-by: Robert Foss <rfoss@kernel.org> +Link: https://patchwork.freedesktop.org/patch/msgid/20231115121338.22959-4-francesco@dolcini.it +--- + drivers/gpu/drm/bridge/lontium-lt8912b.c | 30 ++++++++++++++++++++++++ + 1 file changed, 30 insertions(+) + +diff --git a/drivers/gpu/drm/bridge/lontium-lt8912b.c b/drivers/gpu/drm/bridge/lontium-lt8912b.c +index 097ab04234b7..273157428c82 100644 +--- a/drivers/gpu/drm/bridge/lontium-lt8912b.c ++++ b/drivers/gpu/drm/bridge/lontium-lt8912b.c +@@ -43,6 +43,8 @@ struct lt8912 { + + struct videomode mode; + ++ struct regulator_bulk_data supplies[7]; ++ + u8 data_lanes; + bool is_power_on; + }; +@@ -257,6 +259,12 @@ static int lt8912_free_i2c(struct lt8912 *lt) + + static int lt8912_hard_power_on(struct lt8912 *lt) + { ++ int ret; ++ ++ ret = regulator_bulk_enable(ARRAY_SIZE(lt->supplies), lt->supplies); ++ if (ret) ++ return ret; ++ + gpiod_set_value_cansleep(lt->gp_reset, 0); + msleep(20); + +@@ -267,6 +275,9 @@ static void lt8912_hard_power_off(struct lt8912 *lt) + { + gpiod_set_value_cansleep(lt->gp_reset, 1); + msleep(20); ++ ++ regulator_bulk_disable(ARRAY_SIZE(lt->supplies), lt->supplies); ++ + lt->is_power_on = false; + } + +@@ -661,6 +672,21 @@ static int lt8912_bridge_suspend(struct device *dev) + + static DEFINE_SIMPLE_DEV_PM_OPS(lt8912_bridge_pm_ops, lt8912_bridge_suspend, lt8912_bridge_resume); + ++static int lt8912_get_regulators(struct lt8912 *lt) ++{ ++ unsigned int i; ++ const char * const supply_names[] = { ++ "vdd", "vccmipirx", "vccsysclk", "vcclvdstx", ++ "vcchdmitx", "vcclvdspll", "vcchdmipll" ++ }; ++ ++ for (i = 0; i < ARRAY_SIZE(lt->supplies); i++) ++ lt->supplies[i].supply = supply_names[i]; ++ ++ return devm_regulator_bulk_get(lt->dev, ARRAY_SIZE(lt->supplies), ++ lt->supplies); ++} ++ + static int lt8912_parse_dt(struct lt8912 *lt) + { + struct gpio_desc *gp_reset; +@@ -712,6 +738,10 @@ static int lt8912_parse_dt(struct lt8912 *lt) + goto err_free_host_node; + } + ++ ret = lt8912_get_regulators(lt); ++ if (ret) ++ goto err_free_host_node; ++ + of_node_put(port_node); + return 0; + +-- +2.40.1 + |