Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux

mfd: bd71828, bd71815: Prepare for power-supply support

Add core support for ROHM BD718(15/28/78) PMIC's charger blocks.

Signed-off-by: Matti Vaittinen <matti.vaittinen@fi.rohmeurope.com>
Signed-off-by: Andreas Kemnade <andreas@kemnade.info>
Link: https://lore.kernel.org/r/20250821-bd71828-charger-v3-1-cc74ac4e0fb9@kemnade.info
Signed-off-by: Lee Jones <lee@kernel.org>

authored by

Matti Vaittinen and committed by
Lee Jones
719d02a2 b445c14a

+98 -9
+35 -9
drivers/mfd/rohm-bd71828.c
··· 45 45 46 46 static const struct resource bd71815_power_irqs[] = { 47 47 DEFINE_RES_IRQ_NAMED(BD71815_INT_DCIN_RMV, "bd71815-dcin-rmv"), 48 - DEFINE_RES_IRQ_NAMED(BD71815_INT_CLPS_OUT, "bd71815-clps-out"), 49 - DEFINE_RES_IRQ_NAMED(BD71815_INT_CLPS_IN, "bd71815-clps-in"), 48 + DEFINE_RES_IRQ_NAMED(BD71815_INT_CLPS_OUT, "bd71815-dcin-clps-out"), 49 + DEFINE_RES_IRQ_NAMED(BD71815_INT_CLPS_IN, "bd71815-dcin-clps-in"), 50 50 DEFINE_RES_IRQ_NAMED(BD71815_INT_DCIN_OVP_RES, "bd71815-dcin-ovp-res"), 51 51 DEFINE_RES_IRQ_NAMED(BD71815_INT_DCIN_OVP_DET, "bd71815-dcin-ovp-det"), 52 52 DEFINE_RES_IRQ_NAMED(BD71815_INT_DCIN_MON_RES, "bd71815-dcin-mon-res"), ··· 56 56 DEFINE_RES_IRQ_NAMED(BD71815_INT_VSYS_LOW_RES, "bd71815-vsys-low-res"), 57 57 DEFINE_RES_IRQ_NAMED(BD71815_INT_VSYS_LOW_DET, "bd71815-vsys-low-det"), 58 58 DEFINE_RES_IRQ_NAMED(BD71815_INT_VSYS_MON_RES, "bd71815-vsys-mon-res"), 59 - DEFINE_RES_IRQ_NAMED(BD71815_INT_VSYS_MON_RES, "bd71815-vsys-mon-det"), 59 + DEFINE_RES_IRQ_NAMED(BD71815_INT_VSYS_MON_DET, "bd71815-vsys-mon-det"), 60 60 DEFINE_RES_IRQ_NAMED(BD71815_INT_CHG_WDG_TEMP, "bd71815-chg-wdg-temp"), 61 61 DEFINE_RES_IRQ_NAMED(BD71815_INT_CHG_WDG_TIME, "bd71815-chg-wdg"), 62 62 DEFINE_RES_IRQ_NAMED(BD71815_INT_CHG_RECHARGE_RES, "bd71815-rechg-res"), ··· 87 87 DEFINE_RES_IRQ_NAMED(BD71815_INT_BAT_OVER_CURR_2_DET, "bd71815-bat-oc2-det"), 88 88 DEFINE_RES_IRQ_NAMED(BD71815_INT_BAT_OVER_CURR_3_RES, "bd71815-bat-oc3-res"), 89 89 DEFINE_RES_IRQ_NAMED(BD71815_INT_BAT_OVER_CURR_3_DET, "bd71815-bat-oc3-det"), 90 - DEFINE_RES_IRQ_NAMED(BD71815_INT_TEMP_BAT_LOW_RES, "bd71815-bat-low-res"), 91 - DEFINE_RES_IRQ_NAMED(BD71815_INT_TEMP_BAT_LOW_DET, "bd71815-bat-low-det"), 92 - DEFINE_RES_IRQ_NAMED(BD71815_INT_TEMP_BAT_HI_RES, "bd71815-bat-hi-res"), 93 - DEFINE_RES_IRQ_NAMED(BD71815_INT_TEMP_BAT_HI_DET, "bd71815-bat-hi-det"), 90 + DEFINE_RES_IRQ_NAMED(BD71815_INT_TEMP_BAT_LOW_RES, "bd71815-temp-bat-low-res"), 91 + DEFINE_RES_IRQ_NAMED(BD71815_INT_TEMP_BAT_LOW_DET, "bd71815-temp-bat-low-det"), 92 + DEFINE_RES_IRQ_NAMED(BD71815_INT_TEMP_BAT_HI_RES, "bd71815-temp-bat-hi-res"), 93 + DEFINE_RES_IRQ_NAMED(BD71815_INT_TEMP_BAT_HI_DET, "bd71815-temp-bat-hi-det"), 94 94 }; 95 95 96 96 static const struct mfd_cell bd71815_mfd_cells[] = { ··· 109 109 }, 110 110 }; 111 111 112 - static const struct mfd_cell bd71828_mfd_cells[] = { 112 + static const struct resource bd71828_power_irqs[] = { 113 + DEFINE_RES_IRQ_NAMED(BD71828_INT_CHG_TOPOFF_TO_DONE, 114 + "bd71828-chg-done"), 115 + DEFINE_RES_IRQ_NAMED(BD71828_INT_DCIN_DET, "bd71828-pwr-dcin-in"), 116 + DEFINE_RES_IRQ_NAMED(BD71828_INT_DCIN_RMV, "bd71828-pwr-dcin-out"), 117 + DEFINE_RES_IRQ_NAMED(BD71828_INT_BAT_LOW_VOLT_RES, 118 + "bd71828-vbat-normal"), 119 + DEFINE_RES_IRQ_NAMED(BD71828_INT_BAT_LOW_VOLT_DET, "bd71828-vbat-low"), 120 + DEFINE_RES_IRQ_NAMED(BD71828_INT_TEMP_BAT_HI_DET, "bd71828-btemp-hi"), 121 + DEFINE_RES_IRQ_NAMED(BD71828_INT_TEMP_BAT_HI_RES, "bd71828-btemp-cool"), 122 + DEFINE_RES_IRQ_NAMED(BD71828_INT_TEMP_BAT_LOW_DET, "bd71828-btemp-lo"), 123 + DEFINE_RES_IRQ_NAMED(BD71828_INT_TEMP_BAT_LOW_RES, 124 + "bd71828-btemp-warm"), 125 + DEFINE_RES_IRQ_NAMED(BD71828_INT_TEMP_CHIP_OVER_VF_DET, 126 + "bd71828-temp-hi"), 127 + DEFINE_RES_IRQ_NAMED(BD71828_INT_TEMP_CHIP_OVER_VF_RES, 128 + "bd71828-temp-norm"), 129 + DEFINE_RES_IRQ_NAMED(BD71828_INT_TEMP_CHIP_OVER_125_DET, 130 + "bd71828-temp-125-over"), 131 + DEFINE_RES_IRQ_NAMED(BD71828_INT_TEMP_CHIP_OVER_125_RES, 132 + "bd71828-temp-125-under"), 133 + }; 134 + 135 + static struct mfd_cell bd71828_mfd_cells[] = { 113 136 { .name = "bd71828-pmic", }, 114 137 { .name = "bd71828-gpio", }, 115 138 { .name = "bd71828-led", .of_compatible = "rohm,bd71828-leds" }, ··· 141 118 * BD70528 clock gate are the register address and mask. 142 119 */ 143 120 { .name = "bd71828-clk", }, 144 - { .name = "bd71827-power", }, 145 121 { 122 + .name = "bd71828-power", 123 + .resources = bd71828_power_irqs, 124 + .num_resources = ARRAY_SIZE(bd71828_power_irqs), 125 + }, { 146 126 .name = "bd71828-rtc", 147 127 .resources = bd71828_rtc_irqs, 148 128 .num_resources = ARRAY_SIZE(bd71828_rtc_irqs),
+63
include/linux/mfd/rohm-bd71828.h
··· 189 189 /* Charger/Battey */ 190 190 #define BD71828_REG_CHG_STATE 0x65 191 191 #define BD71828_REG_CHG_FULL 0xd2 192 + #define BD71828_REG_CHG_EN 0x6F 193 + #define BD71828_REG_DCIN_STAT 0x68 194 + #define BD71828_MASK_DCIN_DET 0x01 195 + #define BD71828_REG_VDCIN_U 0x9c 196 + #define BD71828_MASK_CHG_EN 0x01 197 + #define BD71828_CHG_MASK_DCIN_U 0x0f 198 + #define BD71828_REG_BAT_STAT 0x67 199 + #define BD71828_REG_BAT_TEMP 0x6c 200 + #define BD71828_MASK_BAT_TEMP 0x07 201 + #define BD71828_BAT_TEMP_OPEN 0x07 202 + #define BD71828_MASK_BAT_DET 0x20 203 + #define BD71828_MASK_BAT_DET_DONE 0x10 204 + #define BD71828_REG_CHG_STATE 0x65 205 + #define BD71828_REG_VBAT_U 0x8c 206 + #define BD71828_MASK_VBAT_U 0x0f 207 + #define BD71828_REG_VBAT_REX_AVG_U 0x92 208 + 209 + #define BD71828_REG_OCV_PWRON_U 0x8A 210 + 211 + #define BD71828_REG_VBAT_MIN_AVG_U 0x8e 212 + #define BD71828_REG_VBAT_MIN_AVG_L 0x8f 213 + 214 + #define BD71828_REG_CC_CNT3 0xb5 215 + #define BD71828_REG_CC_CNT2 0xb6 216 + #define BD71828_REG_CC_CNT1 0xb7 217 + #define BD71828_REG_CC_CNT0 0xb8 218 + #define BD71828_REG_CC_CURCD_AVG_U 0xb2 219 + #define BD71828_MASK_CC_CURCD_AVG_U 0x3f 220 + #define BD71828_MASK_CC_CUR_DIR 0x80 221 + #define BD71828_REG_VM_BTMP_U 0xa1 222 + #define BD71828_REG_VM_BTMP_L 0xa2 223 + #define BD71828_MASK_VM_BTMP_U 0x0f 224 + #define BD71828_REG_COULOMB_CTRL 0xc4 225 + #define BD71828_REG_COULOMB_CTRL2 0xd2 226 + #define BD71828_MASK_REX_CC_CLR 0x01 227 + #define BD71828_MASK_FULL_CC_CLR 0x10 228 + #define BD71828_REG_CC_CNT_FULL3 0xbd 229 + #define BD71828_REG_CC_CNT_CHG3 0xc1 230 + 231 + #define BD71828_REG_VBAT_INITIAL1_U 0x86 232 + #define BD71828_REG_VBAT_INITIAL1_L 0x87 233 + 234 + #define BD71828_REG_VBAT_INITIAL2_U 0x88 235 + #define BD71828_REG_VBAT_INITIAL2_L 0x89 236 + 237 + #define BD71828_REG_IBAT_U 0xb0 238 + #define BD71828_REG_IBAT_L 0xb1 239 + 240 + #define BD71828_REG_IBAT_AVG_U 0xb2 241 + #define BD71828_REG_IBAT_AVG_L 0xb3 242 + 243 + #define BD71828_REG_VSYS_AVG_U 0x96 244 + #define BD71828_REG_VSYS_AVG_L 0x97 245 + #define BD71828_REG_VSYS_MIN_AVG_U 0x98 246 + #define BD71828_REG_VSYS_MIN_AVG_L 0x99 247 + #define BD71828_REG_CHG_SET1 0x75 248 + #define BD71828_REG_ALM_VBAT_LIMIT_U 0xaa 249 + #define BD71828_REG_BATCAP_MON_LIMIT_U 0xcc 250 + #define BD71828_REG_CONF 0x64 251 + 252 + #define BD71828_REG_DCIN_CLPS 0x71 253 + 254 + #define BD71828_REG_MEAS_CLEAR 0xaf 192 255 193 256 /* LEDs */ 194 257 #define BD71828_REG_LED_CTRL 0x4A