diff for duplicates of <5130C2C7.30400@gmail.com> diff --git a/a/1.txt b/N1/1.txt index 0dea157..e366fb6 100644 --- a/a/1.txt +++ b/N1/1.txt @@ -24,7 +24,7 @@ On 27.02.2013 11:01, Sebastian Hesselbarth wrote: >>> +i2c-master-node { >>> + >>> + /* Si5351a msop10 i2c clock generator */ ->>> + si5351a: clock-generator at 60 { +>>> + si5351a: clock-generator@60 { >>> + compatible = "silabs,si5351a-msop"; >>> + reg = <0x60>; >>> + #address-cells = <1>; @@ -142,10 +142,3 @@ in this thread. You can squash it into your patch if you want. Thanks, Daniel --------------- next part -------------- -A non-text attachment was scrubbed... -Name: 0001-si5351-cache-prepared-bits-of-clocks.patch -Type: text/x-patch -Size: 4908 bytes -Desc: not available -URL: <http://lists.infradead.org/pipermail/linux-arm-kernel/attachments/20130301/a0e2ee23/attachment.bin> diff --git a/N1/2.hdr b/N1/2.hdr new file mode 100644 index 0000000..761a13a --- /dev/null +++ b/N1/2.hdr @@ -0,0 +1,5 @@ +Content-Type: text/x-patch; + name="0001-si5351-cache-prepared-bits-of-clocks.patch" +Content-Transfer-Encoding: 7bit +Content-Disposition: attachment; + filename="0001-si5351-cache-prepared-bits-of-clocks.patch" diff --git a/N1/2.txt b/N1/2.txt new file mode 100644 index 0000000..f91a02b --- /dev/null +++ b/N1/2.txt @@ -0,0 +1,160 @@ +>From 3e7a1a8e1f3e472e473e5ab47329bb44a9ec24ba Mon Sep 17 00:00:00 2001 +From: Daniel Mack <zonque@gmail.com> +Date: Sun, 17 Feb 2013 18:01:08 +0100 +Subject: [PATCH] si5351: cache 'prepared' bits of clocks + +--- + drivers/clk/clk-si5351.c | 47 ++++++++++++++++++++++++++++++++++------------- + 1 file changed, 34 insertions(+), 13 deletions(-) + +diff --git a/drivers/clk/clk-si5351.c b/drivers/clk/clk-si5351.c +index b526742..528f88a 100644 +--- a/drivers/clk/clk-si5351.c ++++ b/drivers/clk/clk-si5351.c +@@ -54,6 +54,7 @@ struct si5351_hw_data { + struct si5351_driver_data *drvdata; + struct si5351_parameters params; + unsigned char num; ++ bool prepared; + }; + + struct si5351_driver_data { +@@ -70,6 +71,9 @@ struct si5351_driver_data { + struct si5351_hw_data pll[2]; + struct si5351_hw_data *msynth; + struct si5351_hw_data *clkout; ++ ++ bool xtal_prepared; ++ bool clkin_prepared; + }; + + static const char const *si5351_input_names[] = { +@@ -223,6 +227,8 @@ static int si5351_xtal_prepare(struct clk_hw *hw) + container_of(hw, struct si5351_driver_data, xtal); + si5351_set_bits(drvdata, SI5351_FANOUT_ENABLE, + SI5351_XTAL_ENABLE, SI5351_XTAL_ENABLE); ++ drvdata->xtal_prepared = true; ++ + return 0; + } + +@@ -232,15 +238,14 @@ static void si5351_xtal_unprepare(struct clk_hw *hw) + container_of(hw, struct si5351_driver_data, xtal); + si5351_set_bits(drvdata, SI5351_FANOUT_ENABLE, + SI5351_XTAL_ENABLE, 0); ++ drvdata->xtal_prepared = false; + } + + static int si5351_xtal_is_enabled(struct clk_hw *hw) + { + struct si5351_driver_data *drvdata = + container_of(hw, struct si5351_driver_data, xtal); +- unsigned char reg; +- reg = si5351_reg_read(drvdata, SI5351_FANOUT_ENABLE); +- return (reg & SI5351_XTAL_ENABLE) ? 1 : 0; ++ return drvdata->xtal_prepared; + } + + static const struct clk_ops si5351_xtal_ops = { +@@ -258,7 +263,8 @@ static int si5351_clkin_prepare(struct clk_hw *hw) + container_of(hw, struct si5351_driver_data, clkin); + si5351_set_bits(drvdata, SI5351_FANOUT_ENABLE, + SI5351_CLKIN_ENABLE, SI5351_CLKIN_ENABLE); +- return 0; ++ drvdata->clkin_prepared = true; ++ return 1; + } + + static void si5351_clkin_unprepare(struct clk_hw *hw) +@@ -267,15 +273,14 @@ static void si5351_clkin_unprepare(struct clk_hw *hw) + container_of(hw, struct si5351_driver_data, clkin); + si5351_set_bits(drvdata, SI5351_FANOUT_ENABLE, + SI5351_CLKIN_ENABLE, 0); ++ drvdata->clkin_prepared = false; + } + + static int si5351_clkin_is_enabled(struct clk_hw *hw) + { + struct si5351_driver_data *drvdata = + container_of(hw, struct si5351_driver_data, clkin); +- unsigned char reg; +- reg = si5351_reg_read(drvdata, SI5351_FANOUT_ENABLE); +- return (reg & SI5351_CLKIN_ENABLE) ? 1 : 0; ++ return drvdata->clkin_prepared; + } + + /* +@@ -660,6 +665,7 @@ static unsigned long si5351_msynth_recalc_rate(struct clk_hw *hw, + m += hwdata->params.p2; + m += 512 * hwdata->params.p3; + } ++printk(" XXXX m %d (%d)\n", m, hwdata->num); + do_div(rate, m); + + dev_dbg(&hwdata->drvdata->client->dev, +@@ -887,6 +893,8 @@ static int si5351_clkout_prepare(struct clk_hw *hw) + SI5351_CLK_POWERDOWN, 0); + si5351_set_bits(hwdata->drvdata, SI5351_OUTPUT_ENABLE_CTRL, + (1 << hwdata->num), 0); ++ hwdata->prepared = true; ++ + return 0; + } + +@@ -899,21 +907,28 @@ static void si5351_clkout_unprepare(struct clk_hw *hw) + SI5351_CLK_POWERDOWN, SI5351_CLK_POWERDOWN); + si5351_set_bits(hwdata->drvdata, SI5351_OUTPUT_ENABLE_CTRL, + (1 << hwdata->num), (1 << hwdata->num)); ++ hwdata->prepared = false; + } + +-static int si5351_clkout_is_enabled(struct clk_hw *hw) ++static void __si5351_read_clkout_prepared(struct si5351_hw_data *hwdata) + { +- struct si5351_hw_data *hwdata = +- container_of(hw, struct si5351_hw_data, hw); + unsigned char val; + + val = si5351_reg_read(hwdata->drvdata, SI5351_CLK0_CTRL + hwdata->num); + if (val & SI5351_CLK_POWERDOWN) +- return 0; ++ hwdata->prepared = false; + val = si5351_reg_read(hwdata->drvdata, SI5351_OUTPUT_ENABLE_CTRL); + if (val & (1 << hwdata->num)) +- return 0; +- return 1; ++ hwdata->prepared = false; ++ hwdata->prepared = true; ++} ++ ++static int si5351_clkout_is_enabled(struct clk_hw *hw) ++{ ++ struct si5351_hw_data *hwdata = ++ container_of(hw, struct si5351_hw_data, hw); ++ ++ return hwdata->prepared; + } + + static u8 si5351_clkout_get_parent(struct clk_hw *hw) +@@ -1306,6 +1321,11 @@ static int si5351_i2c_probe( + return -EINVAL; + } + ++ /* read current clock enable bits */ ++ ret = si5351_reg_read(drvdata, SI5351_FANOUT_ENABLE); ++ drvdata->xtal_prepared = !!(ret & SI5351_XTAL_ENABLE); ++ drvdata->clkin_prepared = !!(ret & SI5351_CLKIN_ENABLE); ++ + /* register PLLB or VXCO (Si5351B) */ + drvdata->pll[1].num = 1; + drvdata->pll[1].drvdata = drvdata; +@@ -1394,6 +1414,7 @@ static int si5351_i2c_probe( + return -EINVAL; + } + drvdata->onecell.clks[n] = clk; ++ __si5351_read_clkout_prepared(&drvdata->clkout[n]); + } + + /* setup clock setup from DT */ +-- +1.8.1.2 diff --git a/a/content_digest b/N1/content_digest index 99deb77..5774917 100644 --- a/a/content_digest +++ b/N1/content_digest @@ -1,11 +1,22 @@ "ref\01360414772-12232-1-git-send-email-sebastian.hesselbarth@gmail.com\0" "ref\05123CF5B.9060804@gmail.com\0" "ref\0CABJ1b_TaQ=AXCM9KKW-hJ0Rgdd+759ia+9P=bdnYbA_HcHP1wQ@mail.gmail.com\0" - "From\0zonque@gmail.com (Daniel Mack)\0" - "Subject\0[PATCH] clk: add si5351 i2c common clock driver\0" + "From\0Daniel Mack <zonque@gmail.com>\0" + "Subject\0Re: [PATCH] clk: add si5351 i2c common clock driver\0" "Date\0Fri, 01 Mar 2013 16:01:27 +0100\0" - "To\0linux-arm-kernel@lists.infradead.org\0" - "\00:1\0" + "To\0Sebastian Hesselbarth <sebastian.hesselbarth@gmail.com>\0" + "Cc\0Stephen Warren <swarren@nvidia.com>" + linux-doc@vger.kernel.org + linux-kernel@vger.kernel.org + Rob Herring <rob.herring@calxeda.com> + Russell King - ARM Linux <linux@arm.linux.org.uk> + Dom Cobley <popcornmix@gmail.com> + Mike Turquette <mturquette@linaro.org> + Andrew Morton <akpm@linux-foundation.org> + Rabeeh Khoury <rabeeh@solid-run.com> + devicetree-discuss@lists.ozlabs.org + " linux-arm-kernel@lists.infradead.org\0" + "\01:1\0" "b\0" "Hi Sebastian,\n" "\n" @@ -33,7 +44,7 @@ ">>> +i2c-master-node {\n" ">>> +\n" ">>> +\t/* Si5351a msop10 i2c clock generator */\n" - ">>> +\tsi5351a: clock-generator at 60 {\n" + ">>> +\tsi5351a: clock-generator@60 {\n" ">>> +\t\tcompatible = \"silabs,si5351a-msop\";\n" ">>> +\t\treg = <0x60>;\n" ">>> +\t\t#address-cells = <1>;\n" @@ -150,13 +161,169 @@ "\n" "\n" "Thanks,\n" - "Daniel\n" - "-------------- next part --------------\n" - "A non-text attachment was scrubbed...\n" - "Name: 0001-si5351-cache-prepared-bits-of-clocks.patch\n" - "Type: text/x-patch\n" - "Size: 4908 bytes\n" - "Desc: not available\n" - URL: <http://lists.infradead.org/pipermail/linux-arm-kernel/attachments/20130301/a0e2ee23/attachment.bin> + Daniel + "\01:2\0" + "fn\00001-si5351-cache-prepared-bits-of-clocks.patch\0" + "b\0" + ">From 3e7a1a8e1f3e472e473e5ab47329bb44a9ec24ba Mon Sep 17 00:00:00 2001\n" + "From: Daniel Mack <zonque@gmail.com>\n" + "Date: Sun, 17 Feb 2013 18:01:08 +0100\n" + "Subject: [PATCH] si5351: cache 'prepared' bits of clocks\n" + "\n" + "---\n" + " drivers/clk/clk-si5351.c | 47 ++++++++++++++++++++++++++++++++++-------------\n" + " 1 file changed, 34 insertions(+), 13 deletions(-)\n" + "\n" + "diff --git a/drivers/clk/clk-si5351.c b/drivers/clk/clk-si5351.c\n" + "index b526742..528f88a 100644\n" + "--- a/drivers/clk/clk-si5351.c\n" + "+++ b/drivers/clk/clk-si5351.c\n" + "@@ -54,6 +54,7 @@ struct si5351_hw_data {\n" + " \tstruct si5351_driver_data\t*drvdata;\n" + " \tstruct si5351_parameters\tparams;\n" + " \tunsigned char\t\t\tnum;\n" + "+\tbool\t\t\t\tprepared;\n" + " };\n" + " \n" + " struct si5351_driver_data {\n" + "@@ -70,6 +71,9 @@ struct si5351_driver_data {\n" + " \tstruct si5351_hw_data\tpll[2];\n" + " \tstruct si5351_hw_data\t*msynth;\n" + " \tstruct si5351_hw_data\t*clkout;\n" + "+\n" + "+\tbool\t\t\txtal_prepared;\n" + "+\tbool\t\t\tclkin_prepared;\n" + " };\n" + " \n" + " static const char const *si5351_input_names[] = {\n" + "@@ -223,6 +227,8 @@ static int si5351_xtal_prepare(struct clk_hw *hw)\n" + " \t\tcontainer_of(hw, struct si5351_driver_data, xtal);\n" + " \tsi5351_set_bits(drvdata, SI5351_FANOUT_ENABLE,\n" + " \t\t\tSI5351_XTAL_ENABLE, SI5351_XTAL_ENABLE);\n" + "+\tdrvdata->xtal_prepared = true;\n" + "+\n" + " \treturn 0;\n" + " }\n" + " \n" + "@@ -232,15 +238,14 @@ static void si5351_xtal_unprepare(struct clk_hw *hw)\n" + " \t\tcontainer_of(hw, struct si5351_driver_data, xtal);\n" + " \tsi5351_set_bits(drvdata, SI5351_FANOUT_ENABLE,\n" + " \t\t\tSI5351_XTAL_ENABLE, 0);\n" + "+\tdrvdata->xtal_prepared = false;\n" + " }\n" + " \n" + " static int si5351_xtal_is_enabled(struct clk_hw *hw)\n" + " {\n" + " \tstruct si5351_driver_data *drvdata =\n" + " \t\tcontainer_of(hw, struct si5351_driver_data, xtal);\n" + "-\tunsigned char reg;\n" + "-\treg = si5351_reg_read(drvdata, SI5351_FANOUT_ENABLE);\n" + "-\treturn (reg & SI5351_XTAL_ENABLE) ? 1 : 0;\n" + "+\treturn drvdata->xtal_prepared;\n" + " }\n" + " \n" + " static const struct clk_ops si5351_xtal_ops = {\n" + "@@ -258,7 +263,8 @@ static int si5351_clkin_prepare(struct clk_hw *hw)\n" + " \t\tcontainer_of(hw, struct si5351_driver_data, clkin);\n" + " \tsi5351_set_bits(drvdata, SI5351_FANOUT_ENABLE,\n" + " \t\t\tSI5351_CLKIN_ENABLE, SI5351_CLKIN_ENABLE);\n" + "-\treturn 0;\n" + "+\tdrvdata->clkin_prepared = true;\n" + "+\treturn 1;\n" + " }\n" + " \n" + " static void si5351_clkin_unprepare(struct clk_hw *hw)\n" + "@@ -267,15 +273,14 @@ static void si5351_clkin_unprepare(struct clk_hw *hw)\n" + " \t\tcontainer_of(hw, struct si5351_driver_data, clkin);\n" + " \tsi5351_set_bits(drvdata, SI5351_FANOUT_ENABLE,\n" + " \t\t\tSI5351_CLKIN_ENABLE, 0);\n" + "+\tdrvdata->clkin_prepared = false;\n" + " }\n" + " \n" + " static int si5351_clkin_is_enabled(struct clk_hw *hw)\n" + " {\n" + " \tstruct si5351_driver_data *drvdata =\n" + " \t\tcontainer_of(hw, struct si5351_driver_data, clkin);\n" + "-\tunsigned char reg;\n" + "-\treg = si5351_reg_read(drvdata, SI5351_FANOUT_ENABLE);\n" + "-\treturn (reg & SI5351_CLKIN_ENABLE) ? 1 : 0;\n" + "+\treturn drvdata->clkin_prepared;\n" + " }\n" + " \n" + " /*\n" + "@@ -660,6 +665,7 @@ static unsigned long si5351_msynth_recalc_rate(struct clk_hw *hw,\n" + " \t\tm += hwdata->params.p2;\n" + " \t\tm += 512 * hwdata->params.p3;\n" + " \t}\n" + "+printk(\" XXXX m %d (%d)\\n\", m, hwdata->num);\n" + " \tdo_div(rate, m);\n" + " \n" + " \tdev_dbg(&hwdata->drvdata->client->dev,\n" + "@@ -887,6 +893,8 @@ static int si5351_clkout_prepare(struct clk_hw *hw)\n" + " \t\t\tSI5351_CLK_POWERDOWN, 0);\n" + " \tsi5351_set_bits(hwdata->drvdata, SI5351_OUTPUT_ENABLE_CTRL,\n" + " \t\t\t(1 << hwdata->num), 0);\n" + "+\thwdata->prepared = true;\n" + "+\n" + " \treturn 0;\n" + " }\n" + " \n" + "@@ -899,21 +907,28 @@ static void si5351_clkout_unprepare(struct clk_hw *hw)\n" + " \t\t\tSI5351_CLK_POWERDOWN, SI5351_CLK_POWERDOWN);\n" + " \tsi5351_set_bits(hwdata->drvdata, SI5351_OUTPUT_ENABLE_CTRL,\n" + " \t\t\t(1 << hwdata->num), (1 << hwdata->num));\n" + "+\thwdata->prepared = false;\n" + " }\n" + " \n" + "-static int si5351_clkout_is_enabled(struct clk_hw *hw)\n" + "+static void __si5351_read_clkout_prepared(struct si5351_hw_data *hwdata)\n" + " {\n" + "-\tstruct si5351_hw_data *hwdata =\n" + "-\t\tcontainer_of(hw, struct si5351_hw_data, hw);\n" + " \tunsigned char val;\n" + " \n" + " \tval = si5351_reg_read(hwdata->drvdata, SI5351_CLK0_CTRL + hwdata->num);\n" + " \tif (val & SI5351_CLK_POWERDOWN)\n" + "-\t\treturn 0;\n" + "+\t\thwdata->prepared = false;\n" + " \tval = si5351_reg_read(hwdata->drvdata, SI5351_OUTPUT_ENABLE_CTRL);\n" + " \tif (val & (1 << hwdata->num))\n" + "-\t\treturn 0;\n" + "-\treturn 1;\n" + "+\t\thwdata->prepared = false;\n" + "+\thwdata->prepared = true;\n" + "+}\n" + "+\n" + "+static int si5351_clkout_is_enabled(struct clk_hw *hw)\n" + "+{\n" + "+\tstruct si5351_hw_data *hwdata =\n" + "+\t\tcontainer_of(hw, struct si5351_hw_data, hw);\n" + "+\n" + "+\treturn hwdata->prepared;\n" + " }\n" + " \n" + " static u8 si5351_clkout_get_parent(struct clk_hw *hw)\n" + "@@ -1306,6 +1321,11 @@ static int si5351_i2c_probe(\n" + " \t\treturn -EINVAL;\n" + " \t}\n" + " \n" + "+\t/* read current clock enable bits */\n" + "+\tret = si5351_reg_read(drvdata, SI5351_FANOUT_ENABLE);\n" + "+\tdrvdata->xtal_prepared = !!(ret & SI5351_XTAL_ENABLE);\n" + "+\tdrvdata->clkin_prepared = !!(ret & SI5351_CLKIN_ENABLE);\n" + "+\n" + " \t/* register PLLB or VXCO (Si5351B) */\n" + " \tdrvdata->pll[1].num = 1;\n" + " \tdrvdata->pll[1].drvdata = drvdata;\n" + "@@ -1394,6 +1414,7 @@ static int si5351_i2c_probe(\n" + " \t\t\treturn -EINVAL;\n" + " \t\t}\n" + " \t\tdrvdata->onecell.clks[n] = clk;\n" + "+\t\t__si5351_read_clkout_prepared(&drvdata->clkout[n]);\n" + " \t}\n" + " \n" + " \t/* setup clock setup from DT */\n" + "-- \n" + 1.8.1.2 -609a71bbef70491b58194e9c3e0e201a37e2e814eb25bb49ec1fa2cb4174a2ff +1c3f0e8f80d81f79bd8534f62b2a0ee85632d303afa800b7748509ef225a81c8
This is an external index of several public inboxes, see mirroring instructions on how to clone and mirror all data and code used by this external index.