Re: [EXTERNAL] Re: [PATCH v6 2/2] power: supply: bq256xx: Introduce the BQ256XX charger driver

2020-12-30 Thread Ricardo Rivera-Matos

Sebastian,

On 10/19/20 4:53 PM, Sebastian Reichel wrote:

Hi Ricardo,

On Mon, Oct 05, 2020 at 04:47:09PM -0500, Ricardo Rivera-Matos wrote:

The BQ256XX family of devices are highly integrated buck chargers
for single cell batteries.

Signed-off-by: Ricardo Rivera-Matos 

v5 - adds power_supply_put_battery_info() and devm_add_action_or_rest() calls

v6 - implements bq256xx_remove function

v6 unfortunately makes things worse. You might want to read some
background information about managed resources:

https://lwn.net/Articles/222860/
https://www.kernel.org/doc/html/latest/driver-api/driver-model/devres.html

ACK



---
  drivers/power/supply/Kconfig   |   11 +
  drivers/power/supply/Makefile  |1 +
  drivers/power/supply/bq256xx_charger.c | 1803 
  3 files changed, 1815 insertions(+)
  create mode 100644 drivers/power/supply/bq256xx_charger.c

diff --git a/drivers/power/supply/Kconfig b/drivers/power/supply/Kconfig
index 44d3c8512fb8..87d852914bc2 100644
--- a/drivers/power/supply/Kconfig
+++ b/drivers/power/supply/Kconfig
@@ -618,6 +618,17 @@ config CHARGER_BQ25890
help
  Say Y to enable support for the TI BQ25890 battery charger.
  
+config CHARGER_BQ256XX

+   tristate "TI BQ256XX battery charger driver"
+   depends on I2C
+   depends on GPIOLIB || COMPILE_TEST
+   select REGMAP_I2C
+   help
+ Say Y to enable support for the TI BQ256XX battery chargers. The
+ BQ256XX family of devices are highly-integrated, switch-mode battery
+ charge management and system power path management devices for single
+ cell Li-ion and Li-polymer batteries.
+
  config CHARGER_SMB347
tristate "Summit Microelectronics SMB347 Battery Charger"
depends on I2C
diff --git a/drivers/power/supply/Makefile b/drivers/power/supply/Makefile
index b9644663e435..e762442c7cc6 100644
--- a/drivers/power/supply/Makefile
+++ b/drivers/power/supply/Makefile
@@ -83,6 +83,7 @@ obj-$(CONFIG_CHARGER_BQ24190) += bq24190_charger.o
  obj-$(CONFIG_CHARGER_BQ24257) += bq24257_charger.o
  obj-$(CONFIG_CHARGER_BQ24735) += bq24735-charger.o
  obj-$(CONFIG_CHARGER_BQ25890) += bq25890_charger.o
+obj-$(CONFIG_CHARGER_BQ256XX)  += bq256xx_charger.o
  obj-$(CONFIG_CHARGER_SMB347)  += smb347-charger.o
  obj-$(CONFIG_CHARGER_TPS65090)+= tps65090-charger.o
  obj-$(CONFIG_CHARGER_TPS65217)+= tps65217_charger.o
diff --git a/drivers/power/supply/bq256xx_charger.c 
b/drivers/power/supply/bq256xx_charger.c
new file mode 100644
index ..b9caec10c456
--- /dev/null
+++ b/drivers/power/supply/bq256xx_charger.c
@@ -0,0 +1,1803 @@
+// SPDX-License-Identifier: GPL-2.0
+// BQ256XX Battery Charger Driver
+// Copyright (C) 2020 Texas Instruments Incorporated - http://www.ti.com/
+
+#include 
+#include 
+#include 
+#include 
+#include 
+#include 
+#include 
+#include 
+#include 
+#include 
+#include 
+#include 
+#include 
+#include 
+#include 
+
+#define BQ256XX_MANUFACTURER "Texas Instruments"
+
+#define BQ256XX_INPUT_CURRENT_LIMIT0x00
+#define BQ256XX_CHARGER_CONTROL_0  0x01
+#define BQ256XX_CHARGE_CURRENT_LIMIT   0x02
+#define BQ256XX_PRECHG_AND_TERM_CURR_LIM   0x03
+#define BQ256XX_BATTERY_VOLTAGE_LIMIT  0x04
+#define BQ256XX_CHARGER_CONTROL_1  0x05
+#define BQ256XX_CHARGER_CONTROL_2  0x06
+#define BQ256XX_CHARGER_CONTROL_3  0x07
+#define BQ256XX_CHARGER_STATUS_0   0x08
+#define BQ256XX_CHARGER_STATUS_1   0x09
+#define BQ256XX_CHARGER_STATUS_2   0x0a
+#define BQ256XX_PART_INFORMATION   0x0b
+#define BQ256XX_CHARGER_CONTROL_4  0x0c
+
+#define BQ256XX_IINDPM_MASKGENMASK(4, 0)
+#define BQ256XX_IINDPM_STEP_uA 10
+#define BQ256XX_IINDPM_OFFSET_uA   10
+#define BQ256XX_IINDPM_MIN_uA  10
+#define BQ256XX_IINDPM_MAX_uA  320
+#define BQ256XX_IINDPM_DEF_uA  240
+
+#define BQ256XX_VINDPM_MASKGENMASK(3, 0)
+#define BQ256XX_VINDPM_STEP_uV 10
+#define BQ256XX_VINDPM_OFFSET_uV   390
+#define BQ256XX_VINDPM_MIN_uV  390
+#define BQ256XX_VINDPM_MAX_uV  540
+#define BQ256XX_VINDPM_DEF_uV  450
+
+#define BQ256XX_VBATREG_MASK   GENMASK(7, 3)
+#define BQ2560X_VBATREG_STEP_uV32000
+#define BQ2560X_VBATREG_OFFSET_uV  3856000
+#define BQ2560X_VBATREG_MIN_uV 3856000
+#define BQ2560X_VBATREG_MAX_uV 4624000
+#define BQ2560X_VBATREG_DEF_uV 4208000
+#define BQ25601D_VBATREG_OFFSET_uV 3847000
+#define BQ25601D_VBATREG_MIN_uV3847000
+#define BQ25601D_VBATREG_MAX_uV4615000
+#define BQ25601D_VBATREG_DEF_uV4199000
+#define BQ2561X_VBATREG_STEP_uV1
+#define BQ25611D_VBATREG_MIN_uV3494000
+#define BQ25611D_VBATREG_MAX_uV451

Re: [PATCH v6 2/2] power: supply: bq256xx: Introduce the BQ256XX charger driver

2020-10-19 Thread Sebastian Reichel
Hi Ricardo,

On Mon, Oct 05, 2020 at 04:47:09PM -0500, Ricardo Rivera-Matos wrote:
> The BQ256XX family of devices are highly integrated buck chargers
> for single cell batteries.
> 
> Signed-off-by: Ricardo Rivera-Matos 
> 
> v5 - adds power_supply_put_battery_info() and devm_add_action_or_rest() calls
> 
> v6 - implements bq256xx_remove function

v6 unfortunately makes things worse. You might want to read some
background information about managed resources:

https://lwn.net/Articles/222860/
https://www.kernel.org/doc/html/latest/driver-api/driver-model/devres.html

> ---
>  drivers/power/supply/Kconfig   |   11 +
>  drivers/power/supply/Makefile  |1 +
>  drivers/power/supply/bq256xx_charger.c | 1803 
>  3 files changed, 1815 insertions(+)
>  create mode 100644 drivers/power/supply/bq256xx_charger.c
> 
> diff --git a/drivers/power/supply/Kconfig b/drivers/power/supply/Kconfig
> index 44d3c8512fb8..87d852914bc2 100644
> --- a/drivers/power/supply/Kconfig
> +++ b/drivers/power/supply/Kconfig
> @@ -618,6 +618,17 @@ config CHARGER_BQ25890
>   help
> Say Y to enable support for the TI BQ25890 battery charger.
>  
> +config CHARGER_BQ256XX
> + tristate "TI BQ256XX battery charger driver"
> + depends on I2C
> + depends on GPIOLIB || COMPILE_TEST
> + select REGMAP_I2C
> + help
> +   Say Y to enable support for the TI BQ256XX battery chargers. The
> +   BQ256XX family of devices are highly-integrated, switch-mode battery
> +   charge management and system power path management devices for single
> +   cell Li-ion and Li-polymer batteries.
> +
>  config CHARGER_SMB347
>   tristate "Summit Microelectronics SMB347 Battery Charger"
>   depends on I2C
> diff --git a/drivers/power/supply/Makefile b/drivers/power/supply/Makefile
> index b9644663e435..e762442c7cc6 100644
> --- a/drivers/power/supply/Makefile
> +++ b/drivers/power/supply/Makefile
> @@ -83,6 +83,7 @@ obj-$(CONFIG_CHARGER_BQ24190)   += bq24190_charger.o
>  obj-$(CONFIG_CHARGER_BQ24257)+= bq24257_charger.o
>  obj-$(CONFIG_CHARGER_BQ24735)+= bq24735-charger.o
>  obj-$(CONFIG_CHARGER_BQ25890)+= bq25890_charger.o
> +obj-$(CONFIG_CHARGER_BQ256XX)+= bq256xx_charger.o
>  obj-$(CONFIG_CHARGER_SMB347) += smb347-charger.o
>  obj-$(CONFIG_CHARGER_TPS65090)   += tps65090-charger.o
>  obj-$(CONFIG_CHARGER_TPS65217)   += tps65217_charger.o
> diff --git a/drivers/power/supply/bq256xx_charger.c 
> b/drivers/power/supply/bq256xx_charger.c
> new file mode 100644
> index ..b9caec10c456
> --- /dev/null
> +++ b/drivers/power/supply/bq256xx_charger.c
> @@ -0,0 +1,1803 @@
> +// SPDX-License-Identifier: GPL-2.0
> +// BQ256XX Battery Charger Driver
> +// Copyright (C) 2020 Texas Instruments Incorporated - http://www.ti.com/
> +
> +#include 
> +#include 
> +#include 
> +#include 
> +#include 
> +#include 
> +#include 
> +#include 
> +#include 
> +#include 
> +#include 
> +#include 
> +#include 
> +#include 
> +#include 
> +
> +#define BQ256XX_MANUFACTURER "Texas Instruments"
> +
> +#define BQ256XX_INPUT_CURRENT_LIMIT  0x00
> +#define BQ256XX_CHARGER_CONTROL_00x01
> +#define BQ256XX_CHARGE_CURRENT_LIMIT 0x02
> +#define BQ256XX_PRECHG_AND_TERM_CURR_LIM 0x03
> +#define BQ256XX_BATTERY_VOLTAGE_LIMIT0x04
> +#define BQ256XX_CHARGER_CONTROL_10x05
> +#define BQ256XX_CHARGER_CONTROL_20x06
> +#define BQ256XX_CHARGER_CONTROL_30x07
> +#define BQ256XX_CHARGER_STATUS_0 0x08
> +#define BQ256XX_CHARGER_STATUS_1 0x09
> +#define BQ256XX_CHARGER_STATUS_2 0x0a
> +#define BQ256XX_PART_INFORMATION 0x0b
> +#define BQ256XX_CHARGER_CONTROL_40x0c
> +
> +#define BQ256XX_IINDPM_MASK  GENMASK(4, 0)
> +#define BQ256XX_IINDPM_STEP_uA   10
> +#define BQ256XX_IINDPM_OFFSET_uA 10
> +#define BQ256XX_IINDPM_MIN_uA10
> +#define BQ256XX_IINDPM_MAX_uA320
> +#define BQ256XX_IINDPM_DEF_uA240
> +
> +#define BQ256XX_VINDPM_MASK  GENMASK(3, 0)
> +#define BQ256XX_VINDPM_STEP_uV   10
> +#define BQ256XX_VINDPM_OFFSET_uV 390
> +#define BQ256XX_VINDPM_MIN_uV390
> +#define BQ256XX_VINDPM_MAX_uV540
> +#define BQ256XX_VINDPM_DEF_uV450
> +
> +#define BQ256XX_VBATREG_MASK GENMASK(7, 3)
> +#define BQ2560X_VBATREG_STEP_uV  32000
> +#define BQ2560X_VBATREG_OFFSET_uV3856000
> +#define BQ2560X_VBATREG_MIN_uV   3856000
> +#define BQ2560X_VBATREG_MAX_uV   4624000
> +#define BQ2560X_VBATREG_DEF_uV   4208000
> +#define BQ25601D_VBATREG_OFFSET_uV   3847000
> +#define BQ25601D_VBATREG_MIN_uV  3847000
> +#define BQ25601D_VBATREG_MAX_uV  4615000
> +#define BQ25601D_VBATREG_DEF_uV 

[PATCH v6 2/2] power: supply: bq256xx: Introduce the BQ256XX charger driver

2020-10-05 Thread Ricardo Rivera-Matos
The BQ256XX family of devices are highly integrated buck chargers
for single cell batteries.

Signed-off-by: Ricardo Rivera-Matos 

v5 - adds power_supply_put_battery_info() and devm_add_action_or_rest() calls

v6 - implements bq256xx_remove function
---
 drivers/power/supply/Kconfig   |   11 +
 drivers/power/supply/Makefile  |1 +
 drivers/power/supply/bq256xx_charger.c | 1803 
 3 files changed, 1815 insertions(+)
 create mode 100644 drivers/power/supply/bq256xx_charger.c

diff --git a/drivers/power/supply/Kconfig b/drivers/power/supply/Kconfig
index 44d3c8512fb8..87d852914bc2 100644
--- a/drivers/power/supply/Kconfig
+++ b/drivers/power/supply/Kconfig
@@ -618,6 +618,17 @@ config CHARGER_BQ25890
help
  Say Y to enable support for the TI BQ25890 battery charger.
 
+config CHARGER_BQ256XX
+   tristate "TI BQ256XX battery charger driver"
+   depends on I2C
+   depends on GPIOLIB || COMPILE_TEST
+   select REGMAP_I2C
+   help
+ Say Y to enable support for the TI BQ256XX battery chargers. The
+ BQ256XX family of devices are highly-integrated, switch-mode battery
+ charge management and system power path management devices for single
+ cell Li-ion and Li-polymer batteries.
+
 config CHARGER_SMB347
tristate "Summit Microelectronics SMB347 Battery Charger"
depends on I2C
diff --git a/drivers/power/supply/Makefile b/drivers/power/supply/Makefile
index b9644663e435..e762442c7cc6 100644
--- a/drivers/power/supply/Makefile
+++ b/drivers/power/supply/Makefile
@@ -83,6 +83,7 @@ obj-$(CONFIG_CHARGER_BQ24190) += bq24190_charger.o
 obj-$(CONFIG_CHARGER_BQ24257)  += bq24257_charger.o
 obj-$(CONFIG_CHARGER_BQ24735)  += bq24735-charger.o
 obj-$(CONFIG_CHARGER_BQ25890)  += bq25890_charger.o
+obj-$(CONFIG_CHARGER_BQ256XX)  += bq256xx_charger.o
 obj-$(CONFIG_CHARGER_SMB347)   += smb347-charger.o
 obj-$(CONFIG_CHARGER_TPS65090) += tps65090-charger.o
 obj-$(CONFIG_CHARGER_TPS65217) += tps65217_charger.o
diff --git a/drivers/power/supply/bq256xx_charger.c 
b/drivers/power/supply/bq256xx_charger.c
new file mode 100644
index ..b9caec10c456
--- /dev/null
+++ b/drivers/power/supply/bq256xx_charger.c
@@ -0,0 +1,1803 @@
+// SPDX-License-Identifier: GPL-2.0
+// BQ256XX Battery Charger Driver
+// Copyright (C) 2020 Texas Instruments Incorporated - http://www.ti.com/
+
+#include 
+#include 
+#include 
+#include 
+#include 
+#include 
+#include 
+#include 
+#include 
+#include 
+#include 
+#include 
+#include 
+#include 
+#include 
+
+#define BQ256XX_MANUFACTURER "Texas Instruments"
+
+#define BQ256XX_INPUT_CURRENT_LIMIT0x00
+#define BQ256XX_CHARGER_CONTROL_0  0x01
+#define BQ256XX_CHARGE_CURRENT_LIMIT   0x02
+#define BQ256XX_PRECHG_AND_TERM_CURR_LIM   0x03
+#define BQ256XX_BATTERY_VOLTAGE_LIMIT  0x04
+#define BQ256XX_CHARGER_CONTROL_1  0x05
+#define BQ256XX_CHARGER_CONTROL_2  0x06
+#define BQ256XX_CHARGER_CONTROL_3  0x07
+#define BQ256XX_CHARGER_STATUS_0   0x08
+#define BQ256XX_CHARGER_STATUS_1   0x09
+#define BQ256XX_CHARGER_STATUS_2   0x0a
+#define BQ256XX_PART_INFORMATION   0x0b
+#define BQ256XX_CHARGER_CONTROL_4  0x0c
+
+#define BQ256XX_IINDPM_MASKGENMASK(4, 0)
+#define BQ256XX_IINDPM_STEP_uA 10
+#define BQ256XX_IINDPM_OFFSET_uA   10
+#define BQ256XX_IINDPM_MIN_uA  10
+#define BQ256XX_IINDPM_MAX_uA  320
+#define BQ256XX_IINDPM_DEF_uA  240
+
+#define BQ256XX_VINDPM_MASKGENMASK(3, 0)
+#define BQ256XX_VINDPM_STEP_uV 10
+#define BQ256XX_VINDPM_OFFSET_uV   390
+#define BQ256XX_VINDPM_MIN_uV  390
+#define BQ256XX_VINDPM_MAX_uV  540
+#define BQ256XX_VINDPM_DEF_uV  450
+
+#define BQ256XX_VBATREG_MASK   GENMASK(7, 3)
+#define BQ2560X_VBATREG_STEP_uV32000
+#define BQ2560X_VBATREG_OFFSET_uV  3856000
+#define BQ2560X_VBATREG_MIN_uV 3856000
+#define BQ2560X_VBATREG_MAX_uV 4624000
+#define BQ2560X_VBATREG_DEF_uV 4208000
+#define BQ25601D_VBATREG_OFFSET_uV 3847000
+#define BQ25601D_VBATREG_MIN_uV3847000
+#define BQ25601D_VBATREG_MAX_uV4615000
+#define BQ25601D_VBATREG_DEF_uV4199000
+#define BQ2561X_VBATREG_STEP_uV1
+#define BQ25611D_VBATREG_MIN_uV3494000
+#define BQ25611D_VBATREG_MAX_uV451
+#define BQ25611D_VBATREG_DEF_uV419
+#define BQ25618_VBATREG_MIN_uV 3504000
+#define BQ25618_VBATREG_MAX_uV 450
+#define BQ25618_VBATREG_DEF_uV 420
+#define BQ256XX_VBATREG_BIT_SHIFT  3
+#define BQ2561X_VBATREG_THRESH 0x8
+#define BQ25611D_VBATREG_THRESH_uV 429
+#define BQ25618_VBATREG_THRESH_uV  430
+
+#define