All of lore.kernel.org
 help / color / mirror / Atom feed
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.