diff --git a/Documentation/devicetree/bindings/net/dsa/microchip,ksz.yaml b/Documentation/devicetree/bindings/net/dsa/microchip,ksz.yaml index 03b5567be389..0527893de7c1 100644 --- a/Documentation/devicetree/bindings/net/dsa/microchip,ksz.yaml +++ b/Documentation/devicetree/bindings/net/dsa/microchip,ksz.yaml @@ -49,6 +49,11 @@ properties: Set if the output SYNCLKO clock should be disabled. Do not mix with microchip,synclko-125. + microchip,disable-internal-ldo: + $ref: /schemas/types.yaml#/definitions/flag + description: + Set if the internal 1.8V LDO should be disabled. + interrupts: maxItems: 1 diff --git a/drivers/net/dsa/microchip/ksz8795.c b/drivers/net/dsa/microchip/ksz8795.c index 91aba470fb2f..2f2f4d86720b 100644 --- a/drivers/net/dsa/microchip/ksz8795.c +++ b/drivers/net/dsa/microchip/ksz8795.c @@ -1390,11 +1390,25 @@ int ksz8_enable_stp_addr(struct ksz_device *dev) return ksz8_w_sta_mac_table(dev, 0, &alu); } +static void ksz8_set_internal_ldo(struct ksz_device *dev) +{ +#define REG_INTERNAL_1V8_LDO_CTRL 0xC1 +#define REG_INTERNAL_1V8_LDO_CTRL_DISABLE BIT(6) + + ksz_cfg(dev, REG_INTERNAL_1V8_LDO_CTRL, REG_INTERNAL_1V8_LDO_CTRL_DISABLE, + dev->disable_internal_ldo); + + if (dev->disable_internal_ldo) + dev_info(dev->dev, "1.8V LDO disabled\n"); +} + int ksz8_setup(struct dsa_switch *ds) { struct ksz_device *dev = ds->priv; int i; + ksz8_set_internal_ldo(dev); + ds->mtu_enforcement_ingress = true; /* We rely on software untagging on the CPU port, so that we diff --git a/drivers/net/dsa/microchip/ksz_common.c b/drivers/net/dsa/microchip/ksz_common.c index 286e20f340e5..817a3f3e124e 100644 --- a/drivers/net/dsa/microchip/ksz_common.c +++ b/drivers/net/dsa/microchip/ksz_common.c @@ -3651,6 +3651,9 @@ int ksz_switch_register(struct ksz_device *dev) dev_err(dev->dev, "inconsistent synclko settings\n"); return -EINVAL; } + + dev->disable_internal_ldo = of_property_read_bool(dev->dev->of_node, + "microchip,disable-internal-ldo"); } ret = dsa_register_switch(dev->ds); diff --git a/drivers/net/dsa/microchip/ksz_common.h b/drivers/net/dsa/microchip/ksz_common.h index a4de58847dea..71b36de1eea6 100644 --- a/drivers/net/dsa/microchip/ksz_common.h +++ b/drivers/net/dsa/microchip/ksz_common.h @@ -148,6 +148,7 @@ struct ksz_device { int irq; struct gpio_desc *reset_gpio; /* Optional reset GPIO */ + bool disable_internal_ldo; /* Disable internal 1.8V LDO */ /* chip specific data */ u32 chip_id;