Lines Matching +full:v +full:- +full:bit
1 // SPDX-License-Identifier: GPL-2.0+
14 #include "bcm-phy-lib.h"
16 /* RDB per-port registers
20 #define BCM54140_RDB_INT_LINK BIT(1) /* link status changed */
21 #define BCM54140_RDB_INT_SPEED BIT(2) /* link speed change */
22 #define BCM54140_RDB_INT_DUPLEX BIT(3) /* duplex mode changed */
24 #define BCM54140_RDB_SPARE1_LSLM BIT(2) /* link speed LED mode */
26 #define BCM54140_RDB_SPARE2_WS_RTRY_DIS BIT(8) /* wirespeed retry disable */
29 #define BCM54140_RDB_SPARE3_BIT0 BIT(0)
31 #define BCM54140_RDB_LED_CTRL_ACTLINK0 BIT(4)
32 #define BCM54140_RDB_LED_CTRL_ACTLINK1 BIT(8)
34 #define BCM54140_RDB_C_APWR_SINGLE_PULSE BIT(8) /* single pulse */
40 #define BCM54140_RDB_C_APWR_SLP_TIM_MASK BIT(4)/* sleep timer */
44 #define BCM54140_RDB_C_PWR_ISOLATE BIT(5) /* super isolate mode */
46 #define BCM54140_RDB_C_MISC_CTRL_WS_EN BIT(4) /* wirespeed enable */
51 #define BCM54140_RDB_TOP_IMR_PORT0 BIT(4)
52 #define BCM54140_RDB_TOP_IMR_PORT1 BIT(5)
53 #define BCM54140_RDB_TOP_IMR_PORT2 BIT(6)
54 #define BCM54140_RDB_TOP_IMR_PORT3 BIT(7)
56 #define BCM54140_RDB_MON_CTRL_V_MODE BIT(3) /* voltage mode */
59 #define BCM54140_RDB_MON_CTRL_SEL_1V0 1 /* meassure AVDDL 1.0V */
60 #define BCM54140_RDB_MON_CTRL_SEL_3V3 2 /* meassure AVDDH 3.3V */
61 #define BCM54140_RDB_MON_CTRL_SEL_RR 3 /* meassure all round-robin */
62 #define BCM54140_RDB_MON_CTRL_PWR_DOWN BIT(0) /* power-down monitor */
67 #define BCM54140_RDB_MON_1V0_VAL 0x835 /* AVDDL 1.0V value */
68 #define BCM54140_RDB_MON_1V0_MAX 0x836 /* AVDDL 1.0V high thresh */
69 #define BCM54140_RDB_MON_1V0_MIN 0x837 /* AVDDL 1.0V low thresh */
71 #define BCM54140_RDB_MON_3V3_VAL 0x838 /* AVDDH 3.3V value */
72 #define BCM54140_RDB_MON_3V3_MAX 0x839 /* AVDDH 3.3V high thresh */
73 #define BCM54140_RDB_MON_3V3_MIN 0x83a /* AVDDH 3.3V low thresh */
76 #define BCM54140_RDB_MON_ISR_3V3 BIT(2) /* AVDDH 3.3V alarm */
77 #define BCM54140_RDB_MON_ISR_1V0 BIT(1) /* AVDDL 1.0V alarm */
78 #define BCM54140_RDB_MON_ISR_TEMP BIT(0) /* temperature alarm */
81 * T = 413.35 - (0.49055 * bits[9:0])
83 #define BCM54140_HWMON_TO_TEMP(v) (413350L - (v) * 491) argument
84 #define BCM54140_HWMON_FROM_TEMP(v) DIV_ROUND_CLOSEST_ULL(413350L - (v), 491) argument
92 #define BCM54140_HWMON_TO_IN_1V0(v) ((v) * 2514 >> 11) argument
93 #define BCM54140_HWMON_FROM_IN_1V0(v) DIV_ROUND_CLOSEST_ULL(((v) << 11), 2514) argument
101 #define BCM54140_HWMON_TO_IN_3V3(v) ((v) * 4400 >> 12) argument
102 #define BCM54140_HWMON_FROM_IN_3V3(v) DIV_ROUND_CLOSEST_ULL(((v) << 12), 4400) argument
104 #define BCM54140_HWMON_TO_IN(ch, v) ((ch) ? BCM54140_HWMON_TO_IN_3V3(v) \ argument
105 : BCM54140_HWMON_TO_IN_1V0(v))
106 #define BCM54140_HWMON_FROM_IN(ch, v) ((ch) ? BCM54140_HWMON_FROM_IN_3V3(v) \ argument
107 : BCM54140_HWMON_FROM_IN_1V0(v))
180 static int bcm54140_hwmon_read_alarm(struct device *dev, unsigned int bit, in bcm54140_hwmon_read_alarm() argument
184 struct bcm54140_priv *priv = phydev->priv; in bcm54140_hwmon_read_alarm()
187 mutex_lock(&priv->alarm_lock); in bcm54140_hwmon_read_alarm()
195 priv->alarm |= tmp; in bcm54140_hwmon_read_alarm()
197 *val = !!(priv->alarm & bit); in bcm54140_hwmon_read_alarm()
198 priv->alarm &= ~bit; in bcm54140_hwmon_read_alarm()
201 mutex_unlock(&priv->alarm_lock); in bcm54140_hwmon_read_alarm()
226 return -EOPNOTSUPP; in bcm54140_hwmon_read_temp()
242 u16 bit, reg; in bcm54140_hwmon_read_in() local
256 bit = BCM54140_HWMON_IN_ALARM_BIT(channel); in bcm54140_hwmon_read_in()
257 return bcm54140_hwmon_read_alarm(dev, bit, val); in bcm54140_hwmon_read_in()
259 return -EOPNOTSUPP; in bcm54140_hwmon_read_in()
282 return -EOPNOTSUPP; in bcm54140_hwmon_read()
302 return -EOPNOTSUPP; in bcm54140_hwmon_read_string()
305 return -EOPNOTSUPP; in bcm54140_hwmon_read_string()
327 return -EOPNOTSUPP; in bcm54140_hwmon_write_temp()
351 return -EOPNOTSUPP; in bcm54140_hwmon_write_in()
368 return -EOPNOTSUPP; in bcm54140_hwmon_write()
400 /* 3.3V voltage mode */ in bcm54140_enable_monitoring()
403 /* select round-robin */ in bcm54140_enable_monitoring()
408 /* remove power-down bit */ in bcm54140_enable_monitoring()
424 hwmon = devm_hwmon_device_register_with_info(&phydev->mdio.dev, in bcm54140_probe_once()
507 struct bcm54140_priv *priv = phydev->priv; in bcm54140_get_base_addr_and_port()
508 struct mii_bus *bus = phydev->mdio.bus; in bcm54140_get_base_addr_and_port()
514 min_addr = phydev->mdio.addr; in bcm54140_get_base_addr_and_port()
515 max_addr = phydev->mdio.addr; in bcm54140_get_base_addr_and_port()
516 addr = phydev->mdio.addr; in bcm54140_get_base_addr_and_port()
536 addr--; in bcm54140_get_base_addr_and_port()
540 addr = phydev->mdio.addr; in bcm54140_get_base_addr_and_port()
556 if ((phy_id & phydev->drv->phy_id_mask) != in bcm54140_get_base_addr_and_port()
557 (phydev->drv->phy_id & phydev->drv->phy_id_mask)) { in bcm54140_get_base_addr_and_port()
558 addr = phydev->mdio.addr; in bcm54140_get_base_addr_and_port()
567 if ((max_addr - min_addr + 1) % 4) { in bcm54140_get_base_addr_and_port()
568 dev_err(&phydev->mdio.dev, in bcm54140_get_base_addr_and_port()
571 return -EINVAL; in bcm54140_get_base_addr_and_port()
574 priv->port = (phydev->mdio.addr - min_addr) % 4; in bcm54140_get_base_addr_and_port()
575 priv->base_addr = phydev->mdio.addr - priv->port; in bcm54140_get_base_addr_and_port()
585 priv = devm_kzalloc(&phydev->mdio.dev, sizeof(*priv), GFP_KERNEL); in bcm54140_probe()
587 return -ENOMEM; in bcm54140_probe()
589 phydev->priv = priv; in bcm54140_probe()
595 devm_phy_package_join(&phydev->mdio.dev, phydev, priv->base_addr, 0); in bcm54140_probe()
598 mutex_init(&priv->alarm_lock); in bcm54140_probe()
608 priv->port, priv->base_addr); in bcm54140_probe()
619 if (BCM54140_PHY_ID_REV(phydev->phy_id) == BCM54140_REV_B0) { in bcm54140_config_init()
688 struct bcm54140_priv *priv = phydev->priv; in bcm54140_config_intr()
695 if (priv->port >= ARRAY_SIZE(port_to_imr_bit)) in bcm54140_config_intr()
696 return -EINVAL; in bcm54140_config_intr()
702 if (phydev->interrupts == PHY_INTERRUPT_ENABLED) { in bcm54140_config_intr()
707 reg &= ~port_to_imr_bit[priv->port]; in bcm54140_config_intr()
710 reg |= port_to_imr_bit[priv->port]; in bcm54140_config_intr()
752 return -EINVAL; in bcm54140_set_downshift()
767 set = FIELD_PREP(BCM54140_RDB_SPARE2_WS_RTRY_LIMIT, cnt - 2); in bcm54140_set_downshift()
833 return -EINVAL; in bcm54140_set_edpd()
842 switch (tuna->id) { in bcm54140_get_tunable()
848 return -EOPNOTSUPP; in bcm54140_get_tunable()
855 switch (tuna->id) { in bcm54140_set_tunable()
861 return -EOPNOTSUPP; in bcm54140_set_tunable()