diff mbox

[3/3] power_supply: max77693: Listen for cable events and enable charging

Message ID 20160927081344.GC4394@kozik-lap (mailing list archive)
State Not Applicable, archived
Headers show

Commit Message

Krzysztof Kozlowski Sept. 27, 2016, 8:13 a.m. UTC
On Tue, Sep 27, 2016 at 01:31:10AM +0200, Wolfgang Wiedmeyer wrote:
> This patch adds a listener for extcon cable events and enables
> charging if an USB cable is connected. It recognizes SDP and DCP cable
> types and treats them the same (same input current and fast charge
> current). The maximum input current is set before the charger is
> enabled and before the charger gets disabled, the maximum input
> current is set to zero. The listener is inspired by the listener
> implementation that was used for the AXP288 Charger driver.
> 
> The patch also adds support for the CURRENT_NOW property. It reads the
> fast charge current that gets set before the charger is enabled or
> disabled.
> 
> Signed-off-by: Wolfgang Wiedmeyer <wolfgit@wiedmeyer.de>

No. This power supply driver should not manage regulators. It is not a
regulator consumer. For that specific need, there is a charger-manager driver.

I agree that you might configure here the charger. You might even expose
some writeable properties through power supply class. However the
purpose of this driver is to expose the battery charger to user-space,
not to replace the user-space with its work.

So... NACK.

If you would like to play with charger-manager, here is my old DTS for
Trats2 (might need updates):

index 595ad4ba6977..b4361b4a9de7 100644

Signed-off-by: Krzysztof Kozlowski <krzk@kernel.org>

Best regards,
Krzysztof

--
To unsubscribe from this list: send the line "unsubscribe linux-pm" in
the body of a message to majordomo@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html

Comments

Wolfgang Wiedmeyer Sept. 27, 2016, 1:34 p.m. UTC | #1
Krzysztof Kozlowski writes:

> On Tue, Sep 27, 2016 at 01:31:10AM +0200, Wolfgang Wiedmeyer wrote:
>> This patch adds a listener for extcon cable events and enables
>> charging if an USB cable is connected. It recognizes SDP and DCP cable
>> types and treats them the same (same input current and fast charge
>> current). The maximum input current is set before the charger is
>> enabled and before the charger gets disabled, the maximum input
>> current is set to zero. The listener is inspired by the listener
>> implementation that was used for the AXP288 Charger driver.
>> 
>> The patch also adds support for the CURRENT_NOW property. It reads the
>> fast charge current that gets set before the charger is enabled or
>> disabled.
>> 
>> Signed-off-by: Wolfgang Wiedmeyer <wolfgit@wiedmeyer.de>
>
> No. This power supply driver should not manage regulators. It is not a
> regulator consumer. For that specific need, there is a charger-manager driver.

When I was in the middle of implementing this, I noticed that the
charger manager does everything that is needed. But it took me quite
some time to configure the DTS correctly until I realized that the
charger manager used a deprecated function
(extcon_register_interest()) and thus couldn't work. And as I didn't see
the charger-manager in any other device's DTS, I thought that this might
not be right way.
But Chanwoo Choi has a fix: https://patchwork.kernel.org/patch/8898541/
So I will try to get it working with this patch.

> I agree that you might configure here the charger. You might even expose
> some writeable properties through power supply class. However the
> purpose of this driver is to expose the battery charger to user-space,
> not to replace the user-space with its work.
>
> So... NACK.

Ok, then I will try to reduce the patch to the CURRENT_NOW property
support.

> If you would like to play with charger-manager, here is my old DTS for
> Trats2 (might need updates):

Is there a reason that this patch is not in the kernel? It would have
been very helpful for me :)

Thanks,
Wolfgang

> index 595ad4ba6977..b4361b4a9de7 100644
> --- a/arch/arm/boot/dts/exynos4412-trats2.dts
> +++ b/arch/arm/boot/dts/exynos4412-trats2.dts
> @@ -856,6 +856,44 @@
>                 };
>         };
>  
> +       charger-manager@0 {
> +               compatible = "charger-manager";
> +               status = "okay";
> +               chg-reg-supply = <&charger_reg>;
> +
> +               cm-name = "battery";
> +               /* Polling only for external power source */
> +               cm-poll-mode = <2>;
> +               cm-poll-interval = <30000>;
> +
> +               cm-fullbatt-vchkdrop-ms = <30000>;
> +               cm-fullbatt-vchkdrop-volt = <150000>;
> +               cm-fullbatt-soc = <100>;
> +
> +               cm-battery-stat = <0>;
> +               cm-fuel-gauge = "max170xx_battery";
> +
> +               /* Allow charging for 5hr */
> +               cm-charging-max = <18000000>;
> +               /* Allow discharging for 2hr */
> +               cm-discharging-max = <7200000>;
> +
> +               cm-num-chargers = <1>;
> +               cm-chargers = "max77693-charger";
> +
> +               charger@0 {
> +                       cm-regulator-name = "chg-reg";
> +                       cable@0 {
> +                               cm-cable-name = "USB";
> +                               cm-cable-extcon = "max77693-muic";
> +                       };
> +                       cable@1 {
> +                               cm-cable-name = "TA";
> +                               cm-cable-extcon = "max77693-muic";
> +                       };
> +               };
> +       };
> +
>         exynos-usbphy@125B0000 {
>                 status = "okay";
>         };
>
> Signed-off-by: Krzysztof Kozlowski <krzk@kernel.org>
>
> Best regards,
> Krzysztof
Krzysztof Kozlowski Sept. 28, 2016, 7:56 a.m. UTC | #2
On 09/27/2016 03:34 PM, Wolfgang Wiedmeyer wrote:
> 
> Krzysztof Kozlowski writes:
> 
>> On Tue, Sep 27, 2016 at 01:31:10AM +0200, Wolfgang Wiedmeyer wrote:
>>> This patch adds a listener for extcon cable events and enables
>>> charging if an USB cable is connected. It recognizes SDP and DCP cable
>>> types and treats them the same (same input current and fast charge
>>> current). The maximum input current is set before the charger is
>>> enabled and before the charger gets disabled, the maximum input
>>> current is set to zero. The listener is inspired by the listener
>>> implementation that was used for the AXP288 Charger driver.
>>>
>>> The patch also adds support for the CURRENT_NOW property. It reads the
>>> fast charge current that gets set before the charger is enabled or
>>> disabled.
>>>
>>> Signed-off-by: Wolfgang Wiedmeyer <wolfgit@wiedmeyer.de>
>>
>> No. This power supply driver should not manage regulators. It is not a
>> regulator consumer. For that specific need, there is a charger-manager driver.
> 
> When I was in the middle of implementing this, I noticed that the
> charger manager does everything that is needed. But it took me quite
> some time to configure the DTS correctly until I realized that the
> charger manager used a deprecated function
> (extcon_register_interest()) and thus couldn't work. And as I didn't see
> the charger-manager in any other device's DTS, I thought that this might
> not be right way.
> But Chanwoo Choi has a fix: https://patchwork.kernel.org/patch/8898541/
> So I will try to get it working with this patch.
> 
>> I agree that you might configure here the charger. You might even expose
>> some writeable properties through power supply class. However the
>> purpose of this driver is to expose the battery charger to user-space,
>> not to replace the user-space with its work.
>>
>> So... NACK.
> 
> Ok, then I will try to reduce the patch to the CURRENT_NOW property
> support.
> 
>> If you would like to play with charger-manager, here is my old DTS for
>> Trats2 (might need updates):
> 
> Is there a reason that this patch is not in the kernel? It would have
> been very helpful for me :)

In general, DeviceTree should describe the hardware. Charger manager is
an abstract device, not a real one. This DT node does not describe real
hardware but it is a driver-specific glue needed to get things done.

I am not convinced that we should add to DTS such abstract devices. What
about people who want to control charging from user-space? They would
have to disable charger-manager from config.

Best regards,
Krzysztof

--
To unsubscribe from this list: send the line "unsubscribe linux-pm" in
the body of a message to majordomo@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html
diff mbox

Patch

--- a/arch/arm/boot/dts/exynos4412-trats2.dts
+++ b/arch/arm/boot/dts/exynos4412-trats2.dts
@@ -856,6 +856,44 @@ 
                };
        };
 
+       charger-manager@0 {
+               compatible = "charger-manager";
+               status = "okay";
+               chg-reg-supply = <&charger_reg>;
+
+               cm-name = "battery";
+               /* Polling only for external power source */
+               cm-poll-mode = <2>;
+               cm-poll-interval = <30000>;
+
+               cm-fullbatt-vchkdrop-ms = <30000>;
+               cm-fullbatt-vchkdrop-volt = <150000>;
+               cm-fullbatt-soc = <100>;
+
+               cm-battery-stat = <0>;
+               cm-fuel-gauge = "max170xx_battery";
+
+               /* Allow charging for 5hr */
+               cm-charging-max = <18000000>;
+               /* Allow discharging for 2hr */
+               cm-discharging-max = <7200000>;
+
+               cm-num-chargers = <1>;
+               cm-chargers = "max77693-charger";
+
+               charger@0 {
+                       cm-regulator-name = "chg-reg";
+                       cable@0 {
+                               cm-cable-name = "USB";
+                               cm-cable-extcon = "max77693-muic";
+                       };
+                       cable@1 {
+                               cm-cable-name = "TA";
+                               cm-cable-extcon = "max77693-muic";
+                       };
+               };
+       };
+
        exynos-usbphy@125B0000 {
                status = "okay";
        };