Quoting Brian Masney (2020-01-07 04:03:17) > On Sun, Jan 05, 2020 at 12:35:33AM -0800, Stephen Boyd wrote: > > Quoting Brian Masney (2019-12-04 16:25:00) > > > +examples: > > > + - | > > > + #include <dt-bindings/clock/qcom,mmcc-msm8974.h> > > > + #include <dt-bindings/gpio/gpio.h> > > > + > > > + vibrator { > > > + compatible = "clk-vibrator"; > > > + > > > + vcc-supply = <&pm8941_l19>; > > > + > > > + clocks = <&mmcc CAMSS_GP1_CLK>; > > > + clock-names = "core"; > > > + clock-frequency = <24000>; > > > + > > > + enable-gpios = <&msmgpio 60 GPIO_ACTIVE_HIGH>; > > > + > > > + pinctrl-names = "default"; > > > + pinctrl-0 = <&vibrator_pin>; > > > > I'm still trying to wrap my head around this. I think we can have a pwm > > provider in a clk controller node (so imagine &mmcc has #pwm-cells) and > > then this 'clk-vibrator' binding wouldn't exist? Instead we would have > > some sort of binding for a device that expects a pwm and whatever else > > is required, like the enable gpio and power supply. Is there an actual > > hardware block that is this way? Does it have a real product id and is > > made by some company? Right now this looks a little too generic to not > > just be a catch-all for something that buzzes. > > So have some of the Qualcomm clocks like this one register with both the > clk and the pwm frameworks? I feel that approach would better represent > the hardware in device tree. That is one option. Or another option would be to have another node that "adapts" a clk signal to a pwm provider. Similar to how we adapt a gpio to make a clk gate or mux. Something like: gcc: clock-controller@f00d { reg = <0xf00d 0xd00d>; #clock-cells = <1>; }; pwm { compatible = "pwm-clk"; #pwm-cells = <0>; clocks = <&gcc 45>; assigned-clocks = <&gcc 45>; assigned-clock-rates = <1400000>; }; And then the pwm-clk driver would adjust the duty cycle to generate a pwm. > > If we did that, then the pwm-vibra driver in the input subsystem could > be used.