Rate was incorrectly computed because we read from wrong divider register.
Signed-off-by: Marek Belisko <[email protected]>
Acked-by: Sebastian Hesselbarth <[email protected]>
---
drivers/clk/clk-si5351.c | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/drivers/clk/clk-si5351.c b/drivers/clk/clk-si5351.c
index 8927284..cf39e53 100644
--- a/drivers/clk/clk-si5351.c
+++ b/drivers/clk/clk-si5351.c
@@ -932,7 +932,7 @@ static unsigned long si5351_clkout_recalc_rate(struct clk_hw *hw,
unsigned char reg;
unsigned char rdiv;
- if (hwdata->num > 5)
+ if (hwdata->num <= 5)
reg = si5351_msynth_params_address(hwdata->num) + 2;
else
reg = SI5351_CLK6_7_OUTPUT_DIVIDER;
--
1.7.9.5
Signed-off-by: Marek Belisko <[email protected]>
---
Changes v1->v2:
- update commit message and comment to refer to platform data not DT
drivers/clk/clk-si5351.c | 10 ++++++++++
1 file changed, 10 insertions(+)
diff --git a/drivers/clk/clk-si5351.c b/drivers/clk/clk-si5351.c
index cf39e53..24f5536 100644
--- a/drivers/clk/clk-si5351.c
+++ b/drivers/clk/clk-si5351.c
@@ -1477,6 +1477,16 @@ static int si5351_i2c_probe(struct i2c_client *client,
return -EINVAL;
}
drvdata->onecell.clks[n] = clk;
+
+ /* set initial clkout rate */
+ if (pdata->clkout[n].rate != 0) {
+ int ret;
+ ret = clk_set_rate(clk, pdata->clkout[n].rate);
+ if (ret != 0) {
+ dev_err(&client->dev, "Cannot set rate : %d\n",
+ ret);
+ }
+ }
}
ret = of_clk_add_provider(client->dev.of_node, of_clk_src_onecell_get,
--
1.7.9.5
On 05/03/2013 07:53 AM, Marek Belisko wrote:
> Signed-off-by: Marek Belisko<[email protected]>
> ---
> Changes v1->v2:
> - update commit message and comment to refer to platform data not DT
Marek,
except that the commit msg itself is very short (there is no!) you can
add my
Acked-by: Sebastian Hesselbarth <[email protected]>
Next time sending patches for clk-si5351, please ensure you are using
get_maintainers.pl and add me to the list of people to Cc also.
Sebastian
> drivers/clk/clk-si5351.c | 10 ++++++++++
> 1 file changed, 10 insertions(+)
>
> diff --git a/drivers/clk/clk-si5351.c b/drivers/clk/clk-si5351.c
> index cf39e53..24f5536 100644
> --- a/drivers/clk/clk-si5351.c
> +++ b/drivers/clk/clk-si5351.c
> @@ -1477,6 +1477,16 @@ static int si5351_i2c_probe(struct i2c_client *client,
> return -EINVAL;
> }
> drvdata->onecell.clks[n] = clk;
> +
> + /* set initial clkout rate */
> + if (pdata->clkout[n].rate != 0) {
> + int ret;
> + ret = clk_set_rate(clk, pdata->clkout[n].rate);
> + if (ret != 0) {
> + dev_err(&client->dev, "Cannot set rate : %d\n",
> + ret);
> + }
> + }
> }
>
> ret = of_clk_add_provider(client->dev.of_node, of_clk_src_onecell_get,
On 05/14/2013 09:16 PM, Mike Turquette wrote:
> Quoting Marek Belisko (2013-05-02 22:53:22)
>> Rate was incorrectly computed because we read from wrong divider register.
>>
>> Signed-off-by: Marek Belisko <[email protected]>
>> Acked-by: Sebastian Hesselbarth <[email protected]>
>
> Do either of these patches need to go into clk-fixes? If so please be
> explicit about it in the changelog, the section under the three dashes.
Yes I believe they should go to clk-fixes (probably also to linux-stable).
>
> Regards,
> Mike
>
>> ---
>> drivers/clk/clk-si5351.c | 2 +-
>> 1 file changed, 1 insertion(+), 1 deletion(-)
>>
>> diff --git a/drivers/clk/clk-si5351.c b/drivers/clk/clk-si5351.c
>> index 8927284..cf39e53 100644
>> --- a/drivers/clk/clk-si5351.c
>> +++ b/drivers/clk/clk-si5351.c
>> @@ -932,7 +932,7 @@ static unsigned long si5351_clkout_recalc_rate(struct clk_hw *hw,
>> unsigned char reg;
>> unsigned char rdiv;
>>
>> - if (hwdata->num > 5)
>> + if (hwdata->num <= 5)
>> reg = si5351_msynth_params_address(hwdata->num) + 2;
>> else
>> reg = SI5351_CLK6_7_OUTPUT_DIVIDER;
>> --
>> 1.7.9.5
>
Regards,
Marek
--
Marek Belisko
Software Developer
StreamUnlimited Engineering GmbH
Gutheil Schodergasse 8-12
A-1100 Vienna, Austria
Office: +421 267200087
e-mail: [email protected]
http://www.streamunlimited.com
Meet us at:
IFA - Berlin, 6-11 September
CEDIA - Denver, 25-28 September