bdk: regulator 5V: improve management per SKU

This commit is contained in:
CTCaer 2022-10-11 03:57:17 +03:00
parent 2aa251c44f
commit 0b2c2aa564

View file

@ -27,6 +27,8 @@ static bool usb_src = false;
void regulator_5v_enable(u8 dev) void regulator_5v_enable(u8 dev)
{ {
bool tegra_t210 = hw_get_chip_id() == GP_HIDREV_MAJOR_T210;
// The power supply selection from battery or USB is automatic. // The power supply selection from battery or USB is automatic.
if (!reg_5v_dev) if (!reg_5v_dev)
{ {
@ -36,10 +38,8 @@ void regulator_5v_enable(u8 dev)
gpio_output_enable(GPIO_PORT_A, GPIO_PIN_5, GPIO_OUTPUT_ENABLE); gpio_output_enable(GPIO_PORT_A, GPIO_PIN_5, GPIO_OUTPUT_ENABLE);
gpio_write(GPIO_PORT_A, GPIO_PIN_5, GPIO_HIGH); gpio_write(GPIO_PORT_A, GPIO_PIN_5, GPIO_HIGH);
// Only Icosa and Iowa have USB 5V VBUS rails. Skip on Hoag/Aula. // Only Icosa has USB 5V VBUS rails.
u32 hw_type = fuse_read_hw_type(); if (tegra_t210)
if (hw_type == FUSE_NX_HW_TYPE_ICOSA ||
hw_type == FUSE_NX_HW_TYPE_IOWA)
{ {
// Fan and Rail power from USB 5V VBUS. // Fan and Rail power from USB 5V VBUS.
PINMUX_AUX(PINMUX_AUX_USB_VBUS_EN0) = PINMUX_LPDR | 1; PINMUX_AUX(PINMUX_AUX_USB_VBUS_EN0) = PINMUX_LPDR | 1;
@ -58,9 +58,8 @@ void regulator_5v_enable(u8 dev)
usb_src = false; usb_src = false;
// Fan regulator 5V for Hoag/Aula. // VBUS/Fan regulator 5V for Iowa/Hoag/Aula.
if (hw_type == FUSE_NX_HW_TYPE_HOAG || if (!tegra_t210)
hw_type == FUSE_NX_HW_TYPE_AULA)
{ {
PINMUX_AUX(PINMUX_AUX_ALS_PROX_INT) = PINMUX_PULL_DOWN; PINMUX_AUX(PINMUX_AUX_ALS_PROX_INT) = PINMUX_PULL_DOWN;
gpio_config(GPIO_PORT_X, GPIO_PIN_3, GPIO_MODE_GPIO); gpio_config(GPIO_PORT_X, GPIO_PIN_3, GPIO_MODE_GPIO);
@ -73,6 +72,8 @@ void regulator_5v_enable(u8 dev)
void regulator_5v_disable(u8 dev) void regulator_5v_disable(u8 dev)
{ {
bool tegra_t210 = hw_get_chip_id() == GP_HIDREV_MAJOR_T210;
reg_5v_dev &= ~dev; reg_5v_dev &= ~dev;
if (!reg_5v_dev) if (!reg_5v_dev)
@ -80,10 +81,8 @@ void regulator_5v_disable(u8 dev)
// Rail power from battery 5V regulator. // Rail power from battery 5V regulator.
gpio_write(GPIO_PORT_A, GPIO_PIN_5, GPIO_LOW); gpio_write(GPIO_PORT_A, GPIO_PIN_5, GPIO_LOW);
// Only Icosa and Iowa have USB 5V VBUS rails. Skip on Hoag/Aula. // Only Icosa has USB 5V VBUS rails.
u32 hw_type = fuse_read_hw_type(); if (tegra_t210)
if (hw_type == FUSE_NX_HW_TYPE_ICOSA ||
hw_type == FUSE_NX_HW_TYPE_IOWA)
{ {
// Rail power from USB 5V VBUS. // Rail power from USB 5V VBUS.
gpio_write(GPIO_PORT_CC, GPIO_PIN_4, GPIO_LOW); gpio_write(GPIO_PORT_CC, GPIO_PIN_4, GPIO_LOW);
@ -91,9 +90,8 @@ void regulator_5v_disable(u8 dev)
} }
// Fan regulator 5V for Hoag/Aula. // VBUS/Fan regulator 5V for Hoag/Aula.
if (hw_type == FUSE_NX_HW_TYPE_HOAG || if (!tegra_t210)
hw_type == FUSE_NX_HW_TYPE_AULA)
gpio_write(GPIO_PORT_X, GPIO_PIN_3, GPIO_LOW); gpio_write(GPIO_PORT_X, GPIO_PIN_3, GPIO_LOW);
} }
} }
@ -105,10 +103,8 @@ bool regulator_5v_get_dev_enabled(u8 dev)
void regulator_5v_usb_src_enable(bool enable) void regulator_5v_usb_src_enable(bool enable)
{ {
// Only for Icosa/Iowa. Skip on Hoag/Aula. // Only for Icosa.
u32 hw_type = fuse_read_hw_type(); if (hw_get_chip_id() != GP_HIDREV_MAJOR_T210)
if (hw_type != FUSE_NX_HW_TYPE_ICOSA &&
hw_type != FUSE_NX_HW_TYPE_IOWA)
return; return;
if (enable && !usb_src) if (enable && !usb_src)