mbox series

[v4,00/27] This is continued work on Samsung S9(SM-9600) starqltechn

Message ID 20240913-starqltechn_integration_upstream-v4-0-2d2efd5c5877@gmail.com
Headers show
Series This is continued work on Samsung S9(SM-9600) starqltechn | expand

Message

Dzmitry Sankouski Sept. 13, 2024, 3:07 p.m. UTC
Add support for new features:
- sound (headphones and mics only)
- gpu
- panel
- buttons
- MAX77705 MFD:
  - charger
  - fuelgauge
  - haptic
  - led

Changes in version 2:
- s2dos05 regulator:
  - hex to decimal in regulator values
  - fix compatible value
  - remove interrupt specific code, because it's
    empty in vendor kernel, and I cannot test it on
    available hardware anyway.

Changes in version 3:
Version 3 has significant changes:
- more drivers added
- s2dos05 driver converted to MFD
- disable crypto patch removed(disabled on distro level)
- dts framebuffer node along with related patches removed,
because panel driver added
- fix 'make O=.output_arm64 CHECK_DTBS=y qcom/sdm845-samsung-starqltechn.dtb'
errors, but it still complains on 'monitored-battery' and
'power-supplies' though I have 'power-supply.yaml' link in charger
and fuel gauge bindings.

Signed-off-by: Dzmitry Sankouski <dsankouski@gmail.com>
---
Changes in v4:
- Rewrite max77705, max77705_charger, max77705_fuel_gauge from scratch
- Reorder patches:
  - squash max77705 subdevice bindings in core file because
    no resources there
  - split device tree changes
- Use _ as space for filenames in power/supply like the majority
- Replace gcc-845 freq_tbl frequencies patch with new approach,
  based on automatic m/n/pre_div value generation
- Link to v3: https://lore.kernel.org/r/20240618-starqltechn_integration_upstream-v3-0-e3f6662017ac@gmail.com

---
Dzmitry Sankouski (27):
      power: supply: add undervoltage health status property
      clk: qcom: clk-rcg2: name refactoring
      gcc-sdm845: Add general purpose clock ops
      dt-bindings: panel: add Samsung s6e3ha8
      dt-bindings: mfd: add maxim,max77705
      dt-bindings: mfd: add samsung,s2dos05
      drm/panel: Add support for S6E3HA8 panel driver
      mfd: max77693: remove unused declarations
      mfd: Add new driver for MAX77705 PMIC
      input: max77693: add max77705 haptic support
      power: supply: max77705: Add charger driver for Maxim 77705
      power: supply: max77705: Add fuel gauge driver for Maxim 77705
      leds: max77705: Add LEDs support
      mfd: sec-core: add s2dos05 support
      regulator: add s2dos05 regulator support
      arm64: dts: qcom: sdm845: enable gmu
      arm64: dts: qcom: starqltechn: remove wifi
      arm64: dts: qcom: starqltechn: fix usb regulator mistake
      arm64: dts: qcom: starqltechn: refactor node order
      arm64: dts: qcom: starqltechn: remove excess reserved gpios
      arm64: dts: qcom: starqltechn: add gpio keys
      arm64: dts: qcom: starqltechn: add max77705 PMIC
      arm64: dts: qcom: starqltechn: add display PMIC
      arm64: dts: qcom: starqltechn: add touchscreen support
      arm64: dts: qcom: starqltechn: add initial sound support
      arm64: dts: qcom: starqltechn: add graphics support
      arm64: dts: qcom: starqltechn: add modem support

 .../bindings/display/panel/samsung,s6e3ha8.yaml    |  75 +++
 .../devicetree/bindings/mfd/maxim,max77705.yaml    | 169 ++++++
 .../devicetree/bindings/mfd/samsung,s2dos05.yaml   |  99 ++++
 MAINTAINERS                                        |  12 +
 arch/arm64/boot/dts/qcom/sdm845-cheza.dtsi         |   4 -
 arch/arm64/boot/dts/qcom/sdm845-db845c.dts         |   4 -
 arch/arm64/boot/dts/qcom/sdm845-mtp.dts            |   4 -
 .../arm64/boot/dts/qcom/sdm845-oneplus-common.dtsi |   4 -
 .../boot/dts/qcom/sdm845-samsung-starqltechn.dts   | 573 +++++++++++++++++++-
 arch/arm64/boot/dts/qcom/sdm845-shift-axolotl.dts  |   4 -
 .../boot/dts/qcom/sdm845-sony-xperia-tama.dtsi     |   4 -
 .../dts/qcom/sdm845-xiaomi-beryllium-common.dtsi   |   4 -
 arch/arm64/boot/dts/qcom/sdm845-xiaomi-polaris.dts |   4 -
 arch/arm64/boot/dts/qcom/sdm845.dtsi               |   2 -
 drivers/clk/qcom/clk-rcg.h                         |   1 +
 drivers/clk/qcom/clk-rcg2.c                        | 243 ++++++++-
 drivers/clk/qcom/gcc-sdm845.c                      |  21 +-
 drivers/gpu/drm/panel/Kconfig                      |   7 +
 drivers/gpu/drm/panel/Makefile                     |   1 +
 drivers/gpu/drm/panel/panel-samsung-s6e3ha8.c      | 350 ++++++++++++
 drivers/input/misc/Kconfig                         |   4 +-
 drivers/input/misc/Makefile                        |   1 +
 drivers/input/misc/max77693-haptic.c               |  15 +-
 drivers/leds/Kconfig                               |   6 +
 drivers/leds/Makefile                              |   1 +
 drivers/leds/leds-max77705.c                       | 158 ++++++
 drivers/mfd/Kconfig                                |  12 +
 drivers/mfd/Makefile                               |   2 +
 drivers/mfd/max77705.c                             | 248 +++++++++
 drivers/mfd/sec-core.c                             |  11 +
 drivers/power/supply/Kconfig                       |  13 +
 drivers/power/supply/Makefile                      |   2 +
 drivers/power/supply/max77705_charger.c            | 585 +++++++++++++++++++++
 drivers/power/supply/max77705_fuel_gauge.c         | 348 ++++++++++++
 drivers/regulator/Kconfig                          |   8 +
 drivers/regulator/Makefile                         |   1 +
 drivers/regulator/s2dos05-regulator.c              | 176 +++++++
 include/linux/mfd/max77693-common.h                |   6 +-
 include/linux/mfd/max77693-private.h               |  11 -
 include/linux/mfd/max77705-private.h               | 180 +++++++
 include/linux/mfd/max77705_charger.h               | 215 ++++++++
 include/linux/mfd/samsung/core.h                   |   1 +
 include/linux/power/max77705_fuelgauge.h           |  65 +++
 include/linux/power_supply.h                       |   1 +
 include/linux/regulator/s2dos05.h                  |  73 +++
 45 files changed, 3627 insertions(+), 101 deletions(-)
---
base-commit: 5acd9952f95fb4b7da6d09a3be39195a80845eb6
change-id: 20240617-starqltechn_integration_upstream-bc86850b2fe3

Best regards,

Comments

Stephen Boyd Sept. 13, 2024, 6:56 p.m. UTC | #1
Quoting Dzmitry Sankouski (2024-09-13 08:07:45)
> clk-rcg2.c uses 2 variable names for pre divisor register value:
> pre_div and hid_div.
> 
> Replace hid_div with pre_div. Update calc_rate docs to reflect, that
> pre_div is not pure divisor, but a register value, and requires conversion.
> 
> Signed-off-by: Dzmitry Sankouski <dsankouski@gmail.com>
> ---

Nak

hid stands for "half-integer divider" from what I recall. Feel free to
document that, but don't rename it.
Steev Klimaszewski Sept. 13, 2024, 7:02 p.m. UTC | #2
Hi Dzmitry,

On Fri, Sep 13, 2024 at 10:15 AM Dzmitry Sankouski <dsankouski@gmail.com> wrote:
>
> Leave gmu enabled, because it's only probed when
> GPU is.
>
> Signed-off-by: Dzmitry Sankouski <dsankouski@gmail.com>
> ---
>  arch/arm64/boot/dts/qcom/sdm845-cheza.dtsi                   | 4 ----
>  arch/arm64/boot/dts/qcom/sdm845-db845c.dts                   | 4 ----
>  arch/arm64/boot/dts/qcom/sdm845-mtp.dts                      | 4 ----
>  arch/arm64/boot/dts/qcom/sdm845-oneplus-common.dtsi          | 4 ----
>  arch/arm64/boot/dts/qcom/sdm845-shift-axolotl.dts            | 4 ----
>  arch/arm64/boot/dts/qcom/sdm845-sony-xperia-tama.dtsi        | 4 ----
>  arch/arm64/boot/dts/qcom/sdm845-xiaomi-beryllium-common.dtsi | 4 ----
>  arch/arm64/boot/dts/qcom/sdm845-xiaomi-polaris.dts           | 4 ----
>  arch/arm64/boot/dts/qcom/sdm845.dtsi                         | 2 --
>  9 files changed, 34 deletions(-)
>
> diff --git a/arch/arm64/boot/dts/qcom/sdm845-cheza.dtsi b/arch/arm64/boot/dts/qcom/sdm845-cheza.dtsi
> index e8276db9eabb..a5149a384167 100644
> --- a/arch/arm64/boot/dts/qcom/sdm845-cheza.dtsi
> +++ b/arch/arm64/boot/dts/qcom/sdm845-cheza.dtsi
> @@ -741,10 +741,6 @@ touchscreen@10 {
>         };
>  };
>
> -&gmu {
> -       status = "okay";
> -};
> -
>  &gpu {
>         status = "okay";
>  };
> diff --git a/arch/arm64/boot/dts/qcom/sdm845-db845c.dts b/arch/arm64/boot/dts/qcom/sdm845-db845c.dts
> index 9a6d3d0c0ee4..59cb6e6e434c 100644
> --- a/arch/arm64/boot/dts/qcom/sdm845-db845c.dts
> +++ b/arch/arm64/boot/dts/qcom/sdm845-db845c.dts
> @@ -444,10 +444,6 @@ &gcc {
>                            <GCC_LPASS_SWAY_CLK>;
>  };
>
> -&gmu {
> -       status = "okay";
> -};
> -
>  &gpi_dma0 {
>         status = "okay";
>  };
> diff --git a/arch/arm64/boot/dts/qcom/sdm845-mtp.dts b/arch/arm64/boot/dts/qcom/sdm845-mtp.dts
> index 2391f842c903..d31efad8a321 100644
> --- a/arch/arm64/boot/dts/qcom/sdm845-mtp.dts
> +++ b/arch/arm64/boot/dts/qcom/sdm845-mtp.dts
> @@ -414,10 +414,6 @@ &gcc {
>                            <GCC_LPASS_SWAY_CLK>;
>  };
>
> -&gmu {
> -       status = "okay";
> -};
> -
>  &gpu {
>         status = "okay";
>
> diff --git a/arch/arm64/boot/dts/qcom/sdm845-oneplus-common.dtsi b/arch/arm64/boot/dts/qcom/sdm845-oneplus-common.dtsi
> index 46e25c53829a..8a0f154bffc3 100644
> --- a/arch/arm64/boot/dts/qcom/sdm845-oneplus-common.dtsi
> +++ b/arch/arm64/boot/dts/qcom/sdm845-oneplus-common.dtsi
> @@ -345,10 +345,6 @@ &gcc {
>                                 <GCC_LPASS_SWAY_CLK>;
>  };
>
> -&gmu {
> -       status = "okay";
> -};
> -
>  &gpu {
>         status = "okay";
>
> diff --git a/arch/arm64/boot/dts/qcom/sdm845-shift-axolotl.dts b/arch/arm64/boot/dts/qcom/sdm845-shift-axolotl.dts
> index 486ce175e6bc..87fc4021e024 100644
> --- a/arch/arm64/boot/dts/qcom/sdm845-shift-axolotl.dts
> +++ b/arch/arm64/boot/dts/qcom/sdm845-shift-axolotl.dts
> @@ -419,10 +419,6 @@ &gcc {
>                            <GCC_LPASS_SWAY_CLK>;
>  };
>
> -&gmu {
> -       status = "okay";
> -};
> -
>  &gpu {
>         status = "okay";
>
> diff --git a/arch/arm64/boot/dts/qcom/sdm845-sony-xperia-tama.dtsi b/arch/arm64/boot/dts/qcom/sdm845-sony-xperia-tama.dtsi
> index b02a1dc5fecd..a3a304e1ac87 100644
> --- a/arch/arm64/boot/dts/qcom/sdm845-sony-xperia-tama.dtsi
> +++ b/arch/arm64/boot/dts/qcom/sdm845-sony-xperia-tama.dtsi
> @@ -415,10 +415,6 @@ &gcc {
>                         <GCC_LPASS_SWAY_CLK>;
>  };
>
> -&gmu {
> -       status = "okay";
> -};
> -
>  &gpi_dma0 {
>         status = "okay";
>  };
> diff --git a/arch/arm64/boot/dts/qcom/sdm845-xiaomi-beryllium-common.dtsi b/arch/arm64/boot/dts/qcom/sdm845-xiaomi-beryllium-common.dtsi
> index 617b17b2d7d9..f790eb73abdd 100644
> --- a/arch/arm64/boot/dts/qcom/sdm845-xiaomi-beryllium-common.dtsi
> +++ b/arch/arm64/boot/dts/qcom/sdm845-xiaomi-beryllium-common.dtsi
> @@ -239,10 +239,6 @@ &gcc {
>                            <GCC_LPASS_SWAY_CLK>;
>  };
>
> -&gmu {
> -       status = "okay";
> -};
> -
>  &gpu {
>         status = "okay";
>
> diff --git a/arch/arm64/boot/dts/qcom/sdm845-xiaomi-polaris.dts b/arch/arm64/boot/dts/qcom/sdm845-xiaomi-polaris.dts
> index e386b504e978..501575c9beda 100644
> --- a/arch/arm64/boot/dts/qcom/sdm845-xiaomi-polaris.dts
> +++ b/arch/arm64/boot/dts/qcom/sdm845-xiaomi-polaris.dts
> @@ -381,10 +381,6 @@ &gcc {
>                                 <GCC_LPASS_SWAY_CLK>;
>  };
>
> -&gmu {
> -       status = "okay";
> -};
> -
>  &gpi_dma0 {
>         status = "okay";
>  };
> diff --git a/arch/arm64/boot/dts/qcom/sdm845.dtsi b/arch/arm64/boot/dts/qcom/sdm845.dtsi
> index 54077549b9da..fe154216f138 100644
> --- a/arch/arm64/boot/dts/qcom/sdm845.dtsi
> +++ b/arch/arm64/boot/dts/qcom/sdm845.dtsi
> @@ -4948,8 +4948,6 @@ gmu: gmu@506a000 {
>
>                         operating-points-v2 = <&gmu_opp_table>;
>
> -                       status = "disabled";
> -
>                         gmu_opp_table: opp-table {
>                                 compatible = "operating-points-v2";
>
>
> --
> 2.39.2
>
>

This seems like it would also affect the sdm850-lenovo-yoga-c630 which
inherits from sdm850.dtsi which inherits from sdm845.dtsi (they are
sdm845s with 2 higher clock speeds)

-- steev
Sebastian Reichel Sept. 14, 2024, 8:38 a.m. UTC | #3
Hi,

On Fri, Sep 13, 2024 at 06:07:44PM GMT, Dzmitry Sankouski wrote:
> Add POWER_SUPPLY_HEALTH_UNDERVOLTAGE status for power supply
> to report under voltage lockout failures.
> 
> Signed-off-by: Dzmitry Sankouski <dsankouski@gmail.com>
> ---

This is missing updates to
Documentation/ABI/testing/sysfs-class-power and
drivers/power/supply/power_supply_sysfs.c
(POWER_SUPPLY_HEALTH_TEXT).

Greetings,

-- Sebastian

>  include/linux/power_supply.h | 1 +
>  1 file changed, 1 insertion(+)
> 
> diff --git a/include/linux/power_supply.h b/include/linux/power_supply.h
> index 910d407ebe63..8682e6466544 100644
> --- a/include/linux/power_supply.h
> +++ b/include/linux/power_supply.h
> @@ -58,6 +58,7 @@ enum {
>  	POWER_SUPPLY_HEALTH_OVERHEAT,
>  	POWER_SUPPLY_HEALTH_DEAD,
>  	POWER_SUPPLY_HEALTH_OVERVOLTAGE,
> +	POWER_SUPPLY_HEALTH_UNDERVOLTAGE,
>  	POWER_SUPPLY_HEALTH_UNSPEC_FAILURE,
>  	POWER_SUPPLY_HEALTH_COLD,
>  	POWER_SUPPLY_HEALTH_WATCHDOG_TIMER_EXPIRE,
> 
> -- 
> 2.39.2
>
Krzysztof Kozlowski Sept. 16, 2024, 9:09 a.m. UTC | #4
On Fri, Sep 13, 2024 at 06:07:57PM +0300, Dzmitry Sankouski wrote:
> S2dos05 is a panel/touchscreen PMIC, often found in
> Samsung phones. We define 2 sub-devices for which drivers will
> be added in subsequent patches.
> 
> Signed-off-by: Dzmitry Sankouski <dsankouski@gmail.com>
> ---
>  drivers/mfd/sec-core.c           | 11 +++++++++++
>  include/linux/mfd/samsung/core.h |  1 +
>  2 files changed, 12 insertions(+)

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

Best regards,
Krzysztof
Krzysztof Kozlowski Sept. 16, 2024, 9:09 a.m. UTC | #5
On Fri, Sep 13, 2024 at 06:07:51PM +0300, Dzmitry Sankouski wrote:
> Remove `enum max77693_irq_source` declaration because unused.
> 
> Signed-off-by: Dzmitry Sankouski <dsankouski@gmail.com>
> ---
>  include/linux/mfd/max77693-private.h | 11 -----------
>  1 file changed, 11 deletions(-)

Please split your patchset per subsystems. There is no dependency on MFD
bits from your DTS... (if there is, this needs to be fixed anyway)

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

Best regards,
Krzysztof
Krzysztof Kozlowski Sept. 16, 2024, 9:15 a.m. UTC | #6
On Fri, Sep 13, 2024 at 06:08:06PM +0300, Dzmitry Sankouski wrote:
> Add support for s2dos05 display / touchscreen PMIC
> 
> Signed-off-by: Dzmitry Sankouski <dsankouski@gmail.com>
> ---
>  .../boot/dts/qcom/sdm845-samsung-starqltechn.dts   | 77 ++++++++++++++++++++++
>  1 file changed, 77 insertions(+)
> 
> diff --git a/arch/arm64/boot/dts/qcom/sdm845-samsung-starqltechn.dts b/arch/arm64/boot/dts/qcom/sdm845-samsung-starqltechn.dts
> index 865253d8f0c7..5e5684f84ffb 100644
> --- a/arch/arm64/boot/dts/qcom/sdm845-samsung-starqltechn.dts
> +++ b/arch/arm64/boot/dts/qcom/sdm845-samsung-starqltechn.dts
> @@ -39,6 +39,9 @@ framebuffer: framebuffer@9d400000 {
>  			height = <2960>;
>  			stride = <(1440 * 4)>;
>  			format = "a8r8g8b8";
> +			vci-supply = <&s2dos05_ldo4>;
> +			vddr-supply = <&s2dos05_buck1>;
> +			vdd3-supply = <&s2dos05_ldo1>;
>  		};
>  	};
>  
> @@ -101,6 +104,66 @@ key-wink {
>  		};
>  	};
>  
> +	i2c21 {
> +		compatible = "i2c-gpio";
> +		sda-gpios = <&tlmm 127 GPIO_ACTIVE_HIGH>;
> +		scl-gpios = <&tlmm 128 GPIO_ACTIVE_HIGH>;
> +		i2c-gpio,delay-us = <2>;
> +		pinctrl-0 = <&i2c21_sda_state &i2c21_scl_state>;
> +		pinctrl-names = "default";
> +		#address-cells = <1>;
> +		#size-cells = <0>;
> +
> +		pmic@60 {
> +			compatible = "samsung,s2dos05";
> +			reg = <0x60>;
> +
> +			regulators {
> +				s2dos05_ldo1: ldo1 {
> +					regulator-active-discharge = <1>;
> +					regulator-enable-ramp-delay = <12000>;
> +					regulator-min-microvolt = <1500000>;
> +					regulator-max-microvolt = <2000000>;
> +					regulator-name = "s2dos05-ldo1";

Useless name. Please use rather names from the schematics, but I guess
you might not have them, so maybe downstream has reasonable name?

Best regards,
Krzysztof
Krzysztof Kozlowski Sept. 16, 2024, 9:17 a.m. UTC | #7
On Fri, Sep 13, 2024 at 06:08:05PM +0300, Dzmitry Sankouski wrote:
> Add support for max77705 MFD device. Supported sub-devices:
>  charger, fuelgauge, haptic, led
> 
> Signed-off-by: Dzmitry Sankouski <dsankouski@gmail.com>
> ---
>  .../boot/dts/qcom/sdm845-samsung-starqltechn.dts   | 103 +++++++++++++++++++++
>  1 file changed, 103 insertions(+)
> 
> diff --git a/arch/arm64/boot/dts/qcom/sdm845-samsung-starqltechn.dts b/arch/arm64/boot/dts/qcom/sdm845-samsung-starqltechn.dts
> index a3bd5231569d..865253d8f0c7 100644
> --- a/arch/arm64/boot/dts/qcom/sdm845-samsung-starqltechn.dts
> +++ b/arch/arm64/boot/dts/qcom/sdm845-samsung-starqltechn.dts
> @@ -18,6 +18,16 @@ / {
>  	model = "Samsung Galaxy S9 SM-G9600";
>  	compatible = "samsung,starqltechn", "qcom,sdm845";
>  
> +	battery: battery {
> +		compatible = "simple-battery";
> +		constant-charge-current-max-microamp = <2150000>;
> +		charge-full-design-microamp-hours = <3000000>;
> +
> +		over-voltage-threshold-microvolt = <4500000>;
> +		voltage-min-design-microvolt = <3400000>;
> +		voltage-max-design-microvolt = <4350000>;
> +	};
> +
>  	chosen {
>  		#address-cells = <2>;
>  		#size-cells = <2>;
> @@ -90,6 +100,27 @@ key-wink {
>  			debounce-interval = <15>;
>  		};
>  	};
> +
> +	vib_regulator: gpio-regulator {

Please use name for all fixed regulators which matches current format
recommendation: 'regulator-[0-9]v[0-9]'
https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/tree/Documentation/devicetree/bindings/regulator/fixed-regulator.yaml?h=v6.11-rc1#n46

> +		compatible = "regulator-fixed";
> +		regulator-name = "haptic";
> +		regulator-min-microvolt = <1800000>;
> +		regulator-max-microvolt = <1800000>;
> +		regulator-boot-on;
> +		enable-active-high;
> +		gpio = <&pm8998_gpios 18 GPIO_ACTIVE_HIGH>;
> +	};
> +
> +	vib_pwm: pwm {
> +		#pwm-cells = <2>;
> +		compatible = "clk-pwm";

compatible is always the first property. See DTS coding style.

> +		clocks = <&gcc GCC_GP1_CLK>;
> +		assigned-clock-parents = <&rpmhcc RPMH_CXO_CLK>;
> +		assigned-clocks = <&gcc GCC_GP1_CLK_SRC>;
> +		pinctrl-0 = <&motor_pwm_default_state>;
> +		pinctrl-1 = <&motor_pwm_suspend_state>;
> +		pinctrl-names = "default", "suspend";
> +	};
>  };
>  
>  
> @@ -385,10 +416,66 @@ &qupv3_id_1 {
>  	status = "okay";
>  };
>  
> +&gpi_dma1 {
> +	status = "okay";
> +};
> +
>  &uart9 {
>  	status = "okay";
>  };
>  
> +&i2c14 {
> +	status = "okay";
> +
> +	pmic@66 {
> +		compatible = "maxim,max77705";
> +		reg = <0x66>;
> +		interrupt-parent = <&pm8998_gpios>;
> +		interrupts = <11 IRQ_TYPE_LEVEL_LOW>;
> +		pinctrl-0 = <&chg_int_default>;
> +		pinctrl-names = "default";
> +
> +		leds {
> +			compatible = "maxim,max77705-led";
> +			#address-cells = <1>;
> +			#size-cells = <0>;
> +
> +			led@1 {
> +				reg = <1>;
> +				label = "red:usr1";
> +			};
> +
> +			led@2 {
> +				reg = <2>;
> +				label = "green:usr2";
> +			};
> +
> +			led@3 {
> +				reg = <3>;
> +				label = "blue:usr3";
> +			};
> +		};
> +
> +		max77705_charger: charger {
> +			compatible = "maxim,max77705-charger";
> +			monitored-battery = <&battery>;
> +		};
> +
> +		fuel_gauge {

No underscores in node names. See DTS coding style.

Best regards,
Krzysztof
Krzysztof Kozlowski Sept. 16, 2024, 9:21 a.m. UTC | #8
On Fri, Sep 13, 2024 at 06:07:58PM +0300, Dzmitry Sankouski wrote:
> S2dos05 has 1 buck and 4 LDO regulators, used for powering
> panel/touchscreen.
> 
> Signed-off-by: Dzmitry Sankouski <dsankouski@gmail.com>
> 

...

> +#include <linux/bug.h>
> +#include <linux/delay.h>
> +#include <linux/err.h>
> +#include <linux/slab.h>
> +#include <linux/module.h>
> +#include <linux/regmap.h>
> +#include <linux/interrupt.h>
> +#include <linux/platform_device.h>
> +#include <linux/regulator/driver.h>
> +#include <linux/regulator/machine.h>
> +#include <linux/regulator/of_regulator.h>
> +#include <linux/mfd/samsung/core.h>
> +#include <linux/regulator/s2dos05.h>
> +#include <linux/i2c.h>
> +
> +struct s2dos05_data {
> +	struct regmap *regmap;
> +	struct device *dev;
> +};
> +
> +static const struct regulator_ops s2dos05_ops = {

Keep definitions together. This goes down, after all declarations and
macros.

> +	.list_voltage		= regulator_list_voltage_linear,
> +	.map_voltage		= regulator_map_voltage_linear,
> +	.is_enabled		= regulator_is_enabled_regmap,
> +	.enable			= regulator_enable_regmap,
> +	.disable		= regulator_disable_regmap,
> +	.get_voltage_sel	= regulator_get_voltage_sel_regmap,
> +	.set_voltage_sel	= regulator_set_voltage_sel_regmap,
> +	.set_voltage_time_sel	= regulator_set_voltage_time_sel,
> +	.set_active_discharge	= regulator_set_active_discharge_regmap,
> +};
> +
> +#define _BUCK(macro)	S2DOS05_BUCK##macro
> +#define _buck_ops(num)	s2dos05_ops##num
> +
> +#define _LDO(macro)	S2DOS05_LDO##macro
> +#define _REG(ctrl)	S2DOS05_REG##ctrl
> +#define _ldo_ops(num)	s2dos05_ops##num
> +#define _MASK(macro)	S2DOS05_ENABLE_MASK##macro
> +#define _TIME(macro)	S2DOS05_ENABLE_TIME##macro
> +

...

> +
> +static struct regulator_desc regulators[S2DOS05_REGULATOR_MAX] = {

This should be const.

> +		// name, id, ops, min_uv, uV_step, vsel_reg, enable_reg
> +		LDO_DESC("ldo1", _LDO(1), &_ldo_ops(), _LDO(_MIN1),
> +			_LDO(_STEP1), _REG(_LDO1_CFG),
> +			_REG(_EN), _MASK(_L1), _TIME(_LDO), _REG(_LDO1_CFG)),
> +		LDO_DESC("ldo2", _LDO(2), &_ldo_ops(), _LDO(_MIN1),
> +			_LDO(_STEP1), _REG(_LDO2_CFG),
> +			_REG(_EN), _MASK(_L2), _TIME(_LDO), _REG(_LDO2_CFG)),
> +		LDO_DESC("ldo3", _LDO(3), &_ldo_ops(), _LDO(_MIN2),
> +			_LDO(_STEP1), _REG(_LDO3_CFG),
> +			_REG(_EN), _MASK(_L3), _TIME(_LDO), _REG(_LDO3_CFG)),
> +		LDO_DESC("ldo4", _LDO(4), &_ldo_ops(), _LDO(_MIN2),
> +			_LDO(_STEP1), _REG(_LDO4_CFG),
> +			_REG(_EN), _MASK(_L4), _TIME(_LDO), _REG(_LDO4_CFG)),
> +		BUCK_DESC("buck1", _BUCK(1), &_buck_ops(), _BUCK(_MIN1),
> +			_BUCK(_STEP1), _REG(_BUCK_VOUT),
> +			_REG(_EN), _MASK(_B1), _TIME(_BUCK), _REG(_BUCK_CFG)),
> +};
> +
> +static int s2dos05_pmic_probe(struct platform_device *pdev)
> +{
> +	struct device *dev = &pdev->dev;
> +	struct sec_pmic_dev *iodev = dev_get_drvdata(pdev->dev.parent);
> +	struct of_regulator_match *rdata = NULL;
> +	struct s2dos05_data *s2dos05;
> +	struct regulator_config config = { };
> +	unsigned int rdev_num = ARRAY_SIZE(regulators);
> +	int i, ret;
> +
> +	s2dos05 = devm_kzalloc(dev, sizeof(struct s2dos05_data),
> +				GFP_KERNEL);

sizeof(*)

> +	if (!s2dos05)
> +		return -ENOMEM;
> +
> +	platform_set_drvdata(pdev, s2dos05);
> +
> +	rdata = devm_kcalloc(dev, rdev_num, sizeof(*rdata), GFP_KERNEL);
> +	if (!rdata)
> +		return -ENOMEM;
> +
> +	for (i = 0; i < rdev_num; i++)
> +		rdata[i].name = regulators[i].name;
> +
> +	s2dos05->regmap = iodev->regmap_pmic;
> +	s2dos05->dev = dev;
> +	if (!dev->of_node)
> +		dev->of_node = dev->parent->of_node;
> +
> +	for (i = 0; i < rdev_num; i++) {
> +		struct regulator_dev *regulator;
> +
> +		config.init_data = rdata[i].init_data;
> +		config.of_node = rdata[i].of_node;
> +		config.dev = dev;
> +		config.driver_data = s2dos05;
> +		regulator = devm_regulator_register(&pdev->dev,
> +						&regulators[i], &config);
> +		if (IS_ERR(regulator)) {
> +			ret = PTR_ERR(regulator);
> +			dev_err(&pdev->dev, "regulator init failed for %d\n",
> +				i);
> +		}
> +	}
> +
> +	return ret;
> +}
> +
> +static const struct platform_device_id s2dos05_pmic_id[] = {
> +	{ "s2dos05-regulator" },
> +	{ },
> +};
> +MODULE_DEVICE_TABLE(platform, s2dos05_pmic_id);
> +
> +static struct platform_driver s2dos05_platform_driver = {
> +	.driver = {
> +		.name = "s2dos05",
> +	},
> +	.probe = s2dos05_pmic_probe,
> +	.id_table = s2dos05_pmic_id,
> +};
> +module_platform_driver(s2dos05_platform_driver);
> +
> +MODULE_AUTHOR("Dzmitry Sankouski <dsankouski@gmail.com>");
> +MODULE_DESCRIPTION("SAMSUNG s2dos05 Regulator Driver");

s/SAMSUNG/Samsung/

Also, your Kconfig used different name, so please use one - probably
Samsung.

This applies to MFD patch as well.

> +MODULE_LICENSE("GPL");
> diff --git a/include/linux/regulator/s2dos05.h b/include/linux/regulator/s2dos05.h
> new file mode 100644
> index 000000000000..2e89fcbce769
> --- /dev/null
> +++ b/include/linux/regulator/s2dos05.h
> @@ -0,0 +1,73 @@
> +/* SPDX-License-Identifier: GPL-2.0+ */

Are you sure that here (and other places) you want any newer GPL? This
is quite odd. Does original code (from which you took 2016 copyrights)
have this as well?

Best regards,
Krzysztof
Dzmitry Sankouski Sept. 18, 2024, 12:53 p.m. UTC | #9
пн, 16 сент. 2024 г. в 12:10, Krzysztof Kozlowski <krzk@kernel.org>:
>
> On Fri, Sep 13, 2024 at 06:07:51PM +0300, Dzmitry Sankouski wrote:
> > Remove `enum max77693_irq_source` declaration because unused.
> >
> > Signed-off-by: Dzmitry Sankouski <dsankouski@gmail.com>
> > ---
> >  include/linux/mfd/max77693-private.h | 11 -----------
> >  1 file changed, 11 deletions(-)
>
> Please split your patchset per subsystems. There is no dependency on MFD
> bits from your DTS... (if there is, this needs to be fixed anyway)

Indeed, my dts has no dependency on this patch.
However, my dts has dependency on MAX77705, so AFAIU,
I should send this patch separately, while leaving other drivers in same
patchset, right?
Krzysztof Kozlowski Sept. 19, 2024, 7 a.m. UTC | #10
On 18/09/2024 14:53, Dzmitry Sankouski wrote:
> пн, 16 сент. 2024 г. в 12:10, Krzysztof Kozlowski <krzk@kernel.org>:
>>
>> On Fri, Sep 13, 2024 at 06:07:51PM +0300, Dzmitry Sankouski wrote:
>>> Remove `enum max77693_irq_source` declaration because unused.
>>>
>>> Signed-off-by: Dzmitry Sankouski <dsankouski@gmail.com>
>>> ---
>>>  include/linux/mfd/max77693-private.h | 11 -----------
>>>  1 file changed, 11 deletions(-)
>>
>> Please split your patchset per subsystems. There is no dependency on MFD
>> bits from your DTS... (if there is, this needs to be fixed anyway)
> 
> Indeed, my dts has no dependency on this patch.
> However, my dts has dependency on MAX77705, so AFAIU,
> I should send this patch separately, while leaving other drivers in same
> patchset, right?

How DTS could have dependency on MAX77705? It's a clear no go - broken
patch. And something very weird, almost never happening for new hardware.

Best regards,
Krzysztof
Dzmitry Sankouski Sept. 19, 2024, 8:40 a.m. UTC | #11
чт, 19 сент. 2024 г. в 10:00, Krzysztof Kozlowski <krzk@kernel.org>:
>
> On 18/09/2024 14:53, Dzmitry Sankouski wrote:
> > пн, 16 сент. 2024 г. в 12:10, Krzysztof Kozlowski <krzk@kernel.org>:
> >>
> >> On Fri, Sep 13, 2024 at 06:07:51PM +0300, Dzmitry Sankouski wrote:
> >>> Remove `enum max77693_irq_source` declaration because unused.
> >>>
> >>> Signed-off-by: Dzmitry Sankouski <dsankouski@gmail.com>
> >>> ---
> >>>  include/linux/mfd/max77693-private.h | 11 -----------
> >>>  1 file changed, 11 deletions(-)
> >>
> >> Please split your patchset per subsystems. There is no dependency on MFD
> >> bits from your DTS... (if there is, this needs to be fixed anyway)
> >
> > Indeed, my dts has no dependency on this patch.
> > However, my dts has dependency on MAX77705, so AFAIU,
> > I should send this patch separately, while leaving other drivers in same
> > patchset, right?
>
> How DTS could have dependency on MAX77705? It's a clear no go - broken
> patch. And something very weird, almost never happening for new hardware.
>
Oh right, dts only depends on driver bindings, not driver code, so I
can send dts
patches with bindings in separate series, and per subsystem series for new
driver code.
Krzysztof Kozlowski Sept. 19, 2024, 10:07 a.m. UTC | #12
On 19/09/2024 10:40, Dzmitry Sankouski wrote:
> чт, 19 сент. 2024 г. в 10:00, Krzysztof Kozlowski <krzk@kernel.org>:
>>
>> On 18/09/2024 14:53, Dzmitry Sankouski wrote:
>>> пн, 16 сент. 2024 г. в 12:10, Krzysztof Kozlowski <krzk@kernel.org>:
>>>>
>>>> On Fri, Sep 13, 2024 at 06:07:51PM +0300, Dzmitry Sankouski wrote:
>>>>> Remove `enum max77693_irq_source` declaration because unused.
>>>>>
>>>>> Signed-off-by: Dzmitry Sankouski <dsankouski@gmail.com>
>>>>> ---
>>>>>  include/linux/mfd/max77693-private.h | 11 -----------
>>>>>  1 file changed, 11 deletions(-)
>>>>
>>>> Please split your patchset per subsystems. There is no dependency on MFD
>>>> bits from your DTS... (if there is, this needs to be fixed anyway)
>>>
>>> Indeed, my dts has no dependency on this patch.
>>> However, my dts has dependency on MAX77705, so AFAIU,
>>> I should send this patch separately, while leaving other drivers in same
>>> patchset, right?
>>
>> How DTS could have dependency on MAX77705? It's a clear no go - broken
>> patch. And something very weird, almost never happening for new hardware.
>>
> Oh right, dts only depends on driver bindings, not driver code, so I
> can send dts
> patches with bindings in separate series, and per subsystem series for new
> driver code.

This is how you can organize patchsets:
https://lore.kernel.org/all/20231121-topic-sm8650-upstream-dt-v3-0-db9d0507ffd3@linaro.org/


Here is a brief description how to organize the patchset:
https://lore.kernel.org/linux-samsung-soc/CADrjBPq_0nUYRABKpskRF_dhHu+4K=duPVZX==0pr+cjSL_caQ@mail.gmail.com/T/#m2d9130a1342ab201ab49670fa6c858ee3724c83c
Best regards,
Krzysztof
Dzmitry Sankouski Sept. 19, 2024, 1:17 p.m. UTC | #13
> > +             pmic@60 {
> > +                     compatible = "samsung,s2dos05";
> > +                     reg = <0x60>;
> > +
> > +                     regulators {
> > +                             s2dos05_ldo1: ldo1 {
> > +                                     regulator-active-discharge = <1>;
> > +                                     regulator-enable-ramp-delay = <12000>;
> > +                                     regulator-min-microvolt = <1500000>;
> > +                                     regulator-max-microvolt = <2000000>;
> > +                                     regulator-name = "s2dos05-ldo1";
>
> Useless name. Please use rather names from the schematics, but I guess
> you might not have them, so maybe downstream has reasonable name?

Unfortunately, downstream uses that same name.
Krzysztof Kozlowski Sept. 19, 2024, 2 p.m. UTC | #14
On 19/09/2024 15:17, Dzmitry Sankouski wrote:
>>> +             pmic@60 {
>>> +                     compatible = "samsung,s2dos05";
>>> +                     reg = <0x60>;
>>> +
>>> +                     regulators {
>>> +                             s2dos05_ldo1: ldo1 {
>>> +                                     regulator-active-discharge = <1>;
>>> +                                     regulator-enable-ramp-delay = <12000>;
>>> +                                     regulator-min-microvolt = <1500000>;
>>> +                                     regulator-max-microvolt = <2000000>;
>>> +                                     regulator-name = "s2dos05-ldo1";
>>
>> Useless name. Please use rather names from the schematics, but I guess
>> you might not have them, so maybe downstream has reasonable name?
> 
> Unfortunately, downstream uses that same name.

Then "ldo1" is enough.

Best regards,
Krzysztof
Dzmitry Sankouski Sept. 19, 2024, 2:28 p.m. UTC | #15
> > diff --git a/include/linux/regulator/s2dos05.h b/include/linux/regulator/s2dos05.h
> > new file mode 100644
> > index 000000000000..2e89fcbce769
> > --- /dev/null
> > +++ b/include/linux/regulator/s2dos05.h
> > @@ -0,0 +1,73 @@
> > +/* SPDX-License-Identifier: GPL-2.0+ */
>
> Are you sure that here (and other places) you want any newer GPL? This
> is quite odd. Does original code (from which you took 2016 copyrights)
> have this as well?
>
Original code permits redistribution under 2+ license [1].
Is 2+ preferable over 2 only?

[1]: https://github.com/klabit87/twrp_android_samsung_kernel_sdm845/blob/android-8.0/include/linux/regulator/s2dos05.h#L9