Merge tag 'for-v5.7' of git://git.kernel.org/pub/scm/linux/kernel/git/sre/linux-power...
authorLinus Torvalds <torvalds@linux-foundation.org>
Sun, 5 Apr 2020 20:47:57 +0000 (13:47 -0700)
committerLinus Torvalds <torvalds@linux-foundation.org>
Sun, 5 Apr 2020 20:47:57 +0000 (13:47 -0700)
Pull power supply and reset changes from Sebastian Reichel:
 "Core:
   - Nothing

  Drivers:
   - at91-reset: cleanups, proper handling for sam9x60
   - sc27xx, charger-manager: allow building as module
   - sc27xx: add support to read current charge capacity
   - axp288: more quirks for weird hardware
   - misc fixes"

* tag 'for-v5.7' of git://git.kernel.org/pub/scm/linux/kernel/git/sre/linux-power-supply: (26 commits)
  power: reset: sc27xx: Allow the SC27XX poweroff driver building into a module
  power: reset: sc27xx: Change to use cpu_down()
  power: reset: sc27xx: Power off the external subsystems' connection
  power: twl4030: Use scnprintf() for avoiding potential buffer overflow
  power: supply: bq27xxx_battery: Silence deferred-probe error
  power: reset: at91-reset: handle nrst async for sam9x60
  power: reset: at91-reset: get rid of at91_reset_data
  power: reset: at91-reset: keep only one reset function
  power: reset: at91-reset: make at91sam9g45_restart() generic
  power: reset: at91-reset: introduce ramc_lpr to struct at91_reset
  power: reset: at91-reset: use r4 as tmp argument
  power: reset: at91-reset: introduce args member in at91_reset_data
  power: reset: at91-reset: introduce struct at91_reset_data
  power: reset: at91-reset: devm_kzalloc() for at91_reset data structure
  power: reset: at91-reset: pass rstc base address to at91_reset_status()
  power: reset: at91-reset: convert reset in pointer to struct at91_reset
  power: reset: at91-reset: add notifier block to struct at91_reset
  power: reset: at91-reset: add sclk to struct at91_reset
  power: reset: at91-reset: add ramc_base[] to struct at91_reset
  power: reset: at91-reset: introduce struct at91_reset
  ...

1  2 
drivers/power/reset/sc27xx-poweroff.c

index 29fb08b8faa0af73a100325a7d4f6af7ea3b64f8,69863074daf6869c331ff32037838c241d2e3a54..90287c31992c4889f9241e82a21a1949ecca7702
@@@ -6,6 -6,7 +6,7 @@@
  
  #include <linux/cpu.h>
  #include <linux/kernel.h>
+ #include <linux/module.h>
  #include <linux/platform_device.h>
  #include <linux/pm.h>
  #include <linux/regmap.h>
@@@ -13,6 -14,8 +14,8 @@@
  
  #define SC27XX_PWR_PD_HW      0xc2c
  #define SC27XX_PWR_OFF_EN     BIT(0)
+ #define SC27XX_SLP_CTRL               0xdf0
+ #define SC27XX_LDO_XTL_EN     BIT(3)
  
  static struct regmap *regmap;
  
   */
  static void sc27xx_poweroff_shutdown(void)
  {
- #ifdef CONFIG_PM_SLEEP_SMP
-       int cpu = smp_processor_id();
+ #ifdef CONFIG_HOTPLUG_CPU
+       int cpu;
  
-       freeze_secondary_cpus(cpu);
+       for_each_online_cpu(cpu) {
+               if (cpu != smp_processor_id())
 -                      cpu_down(cpu);
++                      remove_cpu(cpu);
+       }
  #endif
  }
  
@@@ -40,6 -46,9 +46,9 @@@ static struct syscore_ops poweroff_sysc
  
  static void sc27xx_poweroff_do_poweroff(void)
  {
+       /* Disable the external subsys connection's power firstly */
+       regmap_write(regmap, SC27XX_SLP_CTRL, SC27XX_LDO_XTL_EN);
        regmap_write(regmap, SC27XX_PWR_PD_HW, SC27XX_PWR_OFF_EN);
  }
  
@@@ -63,4 -72,8 +72,8 @@@ static struct platform_driver sc27xx_po
                .name = "sc27xx-poweroff",
        },
  };
- builtin_platform_driver(sc27xx_poweroff_driver);
+ module_platform_driver(sc27xx_poweroff_driver);
+ MODULE_DESCRIPTION("Power off driver for SC27XX PMIC Device");
+ MODULE_AUTHOR("Baolin Wang <baolin.wang@unisoc.com>");
+ MODULE_LICENSE("GPL v2");