ipq9574: power cycle SDX based on e911 call

This patch adds a condition to power cycle the
SDX based on the current status of the e911 call.

Change-Id: Id3cf50cfb49a26151c98b7d52e18b9c487cfb935
Signed-off-by: Nitheesh Sekar <quic_nsekar@quicinc.com>
This commit is contained in:
Nitheesh Sekar 2023-03-03 11:25:23 +05:30 committed by Gerrit - the friendly Code Review server
parent 9fd9ce73ba
commit 00c26ae30f
3 changed files with 8 additions and 5 deletions

View file

@ -252,5 +252,6 @@
sdx-gpio { sdx-gpio {
power_on = <40>; power_on = <40>;
reset = <47>; reset = <47>;
e911 = <43>;
}; };
}; };

View file

@ -42,5 +42,6 @@
sdx-gpio { sdx-gpio {
power_on = <40>; power_on = <40>;
reset = <47>; reset = <47>;
e911 = <43>;
}; };
}; };

View file

@ -1194,6 +1194,7 @@ void reset_cpu(unsigned long a)
void power_cycle_sdx(void) void power_cycle_sdx(void)
{ {
int node, power_on_gpio = -1, reset_gpio = -1; int node, power_on_gpio = -1, reset_gpio = -1;
int e911_gpio = -1;
unsigned int *power_on_gpio_base, *reset_gpio_base; unsigned int *power_on_gpio_base, *reset_gpio_base;
unsigned int machid = gd->bd->bi_arch_number; unsigned int machid = gd->bd->bi_arch_number;
@ -1201,14 +1202,14 @@ void power_cycle_sdx(void)
return; return;
node = fdt_path_offset(gd->fdt_blob, "/sdx-gpio"); node = fdt_path_offset(gd->fdt_blob, "/sdx-gpio");
if (node >= 0) if (node >= 0) {
power_on_gpio = fdtdec_get_uint(gd->fdt_blob, node, "power_on", -1); power_on_gpio = fdtdec_get_uint(gd->fdt_blob, node, "power_on", -1);
node = fdt_path_offset(gd->fdt_blob, "/sdx-gpio");
if (node >= 0)
reset_gpio = fdtdec_get_uint(gd->fdt_blob, node, "reset", -1); reset_gpio = fdtdec_get_uint(gd->fdt_blob, node, "reset", -1);
e911_gpio = fdtdec_get_uint(gd->fdt_blob, node, "e911", -1);
}
if (power_on_gpio >= 0 && reset_gpio >= 0) { if (power_on_gpio > 0 && reset_gpio > 0 &&
(e911_gpio <= 0 || !gpio_get_value(e911_gpio))) {
power_on_gpio_base = (unsigned int *)GPIO_CONFIG_ADDR(power_on_gpio); power_on_gpio_base = (unsigned int *)GPIO_CONFIG_ADDR(power_on_gpio);
reset_gpio_base = (unsigned int *)GPIO_CONFIG_ADDR(reset_gpio); reset_gpio_base = (unsigned int *)GPIO_CONFIG_ADDR(reset_gpio);
writel(0x2c1, power_on_gpio_base); writel(0x2c1, power_on_gpio_base);