* [RFC] Common clock framework for external clock generators [not found] ` <50785EBF.3060508@gmail.com> @ 2012-10-14 10:59 ` Sebastian Hesselbarth 2012-10-14 11:13 ` Daniel Mack 0 siblings, 1 reply; 3+ messages in thread From: Sebastian Hesselbarth @ 2012-10-14 10:59 UTC (permalink / raw) To: linux-arm-kernel Adding LAKML and devtree as there might be people willing to comment about DT representation of i2c-attached clock generators, too. On 10/12/2012 08:17 PM, Daniel Mack wrote: > On 11.10.2012 18:00, Sebastian Hesselbarth wrote: >> [...] >> Does any of you work rely on a working si5351 driver? > > Yes, it does actually. I can hack around it for now, but at some point, > a proper driver is needed. And yours looks quite feature complete, so it > would be easiest to finish this one :) Well, yes it is some kind of feature complete except regmap and DT. Adding regmap to the driver should be quite easy but with DT I am still thinking of the best way to represent the internal connections between OSC, PLLs, and CLKOUTs. In the last version of the driver I had a callback that was board specific to setup these connections but with DT there will be no board specific code anymore. Maybe one of the common clk maintainers can give a hint how this could be done in a clean way. The question is how to represent a i2c-attached clock generator config in DT where you want to setup clock parents of CLKOUTs and PLLs. A possible solution would be something like this: si5351a at 60 { compatible = "silabs,si5351a"; reg = <0x60>; si_osc: osc { compatible = "fixed-clock"; clock-frequency = <270000000>; }; si_plla: pll at 0 { compatible = "silabs,si5351-pll"; /* hook-up plla to osc input */ clocks = <&si_osc>; }; si_clkout0: clkout at 0 { compatible = "silabs,si5351-clkout"; /* hook-up clkout0 to plla */ clocks = <&si_plla>; /* request target frequency */ clock-frequency = <148500000>; }; }; Although this perfectly describes the clock hierarchy I still don't like the sub-node style. Another flat solution would be something like: si_osc: osc { compatible = "fixed-clock"; clock-frequency = <270000000>; }; si5351a at 60 { compatible = "silabs,si5351a"; reg = <0x60>; clocks = <&si_osc>; si5351-pll-config = <0 0 /* pll A to osc */ 1 0>; /* pll B to osc */ si5351-clock-config = <0 0 148500000 /* clkout 0 to pll A, 148.5MHz */ 1 0 0 /* clkout 1 to pll A, disabled */ 2 1 24000000>; /* clkout 2 to pll B, 24.0Mhz */ }; > Do you still have access to hardware you wrote the driver for? Let me > know if you need any help around here. Yes, hardware is still available although I only have access to the Si5351a with 3 clkouts. The code should be compatible for Si5351a with 8 clkouts and code skeleton for 5351b (OSC and VXCO input) and 5351c (OSC and CLKIN) is there but untested. I've transferred the current driver version to my repository to work on. As soon as I have regmap done, I will push it online and give you a note. Sebastian ^ permalink raw reply [flat|nested] 3+ messages in thread
* [RFC] Common clock framework for external clock generators 2012-10-14 10:59 ` [RFC] Common clock framework for external clock generators Sebastian Hesselbarth @ 2012-10-14 11:13 ` Daniel Mack 2012-10-14 16:16 ` Sebastian Hesselbarth 0 siblings, 1 reply; 3+ messages in thread From: Daniel Mack @ 2012-10-14 11:13 UTC (permalink / raw) To: linux-arm-kernel Hi, On 14.10.2012 12:59, Sebastian Hesselbarth wrote: > Adding LAKML and devtree as there might be people willing to comment about > DT representation of i2c-attached clock generators, too. > > On 10/12/2012 08:17 PM, Daniel Mack wrote: >> On 11.10.2012 18:00, Sebastian Hesselbarth wrote: > >> [...] >>> Does any of you work rely on a working si5351 driver? >> >> Yes, it does actually. I can hack around it for now, but at some point, >> a proper driver is needed. And yours looks quite feature complete, so it >> would be easiest to finish this one :) > > Well, yes it is some kind of feature complete except regmap and DT. Adding > regmap to the driver should be quite easy but with DT I am still thinking > of the best way to represent the internal connections between OSC, PLLs, and > CLKOUTs. In the last version of the driver I had a callback that was > board specific to setup these connections but with DT there will be no board > specific code anymore. > > Maybe one of the common clk maintainers can give a hint how this could be > done in a clean way. The question is how to represent a i2c-attached clock > generator config in DT where you want to setup clock parents of CLKOUTs and > PLLs. > > A possible solution would be something like this: > > si5351a at 60 { > compatible = "silabs,si5351a"; > reg = <0x60>; > > si_osc: osc { > compatible = "fixed-clock"; > clock-frequency = <270000000>; > }; > > si_plla: pll at 0 { > compatible = "silabs,si5351-pll"; > /* hook-up plla to osc input */ > clocks = <&si_osc>; > }; > > si_clkout0: clkout at 0 { > compatible = "silabs,si5351-clkout"; > /* hook-up clkout0 to plla */ > clocks = <&si_plla>; > /* request target frequency */ > clock-frequency = <148500000>; > }; > }; > > Although this perfectly describes the clock hierarchy I still don't like > the sub-node style. Another flat solution would be something like: I think the sub-node style above it nicer because it allows referencing the individual clocks outputs with a phandle. We use this chip to generate base-frequencies for audio clocks, and so we have to switch between two freqs for the multiples of 22.5KHz and 24KHz at runtime. >> Do you still have access to hardware you wrote the driver for? Let me >> know if you need any help around here. > > Yes, hardware is still available although I only have access to the Si5351a > with 3 clkouts. The code should be compatible for Si5351a with 8 clkouts and > code skeleton for 5351b (OSC and VXCO input) and 5351c (OSC and CLKIN) is > there but untested. The 3 clkout model is the only one I have access to as well. > I've transferred the current driver version to my repository to work on. As soon > as I have regmap done, I will push it online and give you a note. That's great. Let me know if you want me to test anything. Thanks, Daniel ^ permalink raw reply [flat|nested] 3+ messages in thread
* [RFC] Common clock framework for external clock generators 2012-10-14 11:13 ` Daniel Mack @ 2012-10-14 16:16 ` Sebastian Hesselbarth 0 siblings, 0 replies; 3+ messages in thread From: Sebastian Hesselbarth @ 2012-10-14 16:16 UTC (permalink / raw) To: linux-arm-kernel On 10/14/2012 01:13 PM, Daniel Mack wrote: > I think the sub-node style above it nicer because it allows referencing > the individual clocks outputs with a phandle. We use this chip to > generate base-frequencies for audio clocks, and so we have to switch > between two freqs for the multiples of 22.5KHz and 24KHz at runtime. Both examples allow you to have a phandle for all individual clock-outputs. The examples weren't complete but with the sub-node style you'll reference with e.g. <&clkout0> while the flat one will use <&si5351 0>. I still prefer the flat-style as it will not allow to have a phandle of plls. Sebastian ^ permalink raw reply [flat|nested] 3+ messages in thread
end of thread, other threads:[~2012-10-14 16:16 UTC | newest] Thread overview: 3+ messages (download: mbox.gz follow: Atom feed -- links below jump to the message on this page -- [not found] <4FAB15DB.5050702@googlemail.com> [not found] ` <5076847A.3010705@gmail.com> [not found] ` <5076ED22.3060803@gmail.com> [not found] ` <50785EBF.3060508@gmail.com> 2012-10-14 10:59 ` [RFC] Common clock framework for external clock generators Sebastian Hesselbarth 2012-10-14 11:13 ` Daniel Mack 2012-10-14 16:16 ` Sebastian Hesselbarth
This is a public inbox, see mirroring instructions for how to clone and mirror all data and code used for this inbox; as well as URLs for NNTP newsgroup(s).