Thread (19 messages) 19 messages, 3 authors, 2021-03-12

Re: [PATCH 8/9] clk: si5341: Add silabs,iovdd-33 property

From: Robert Hancock <hidden>
Date: 2021-03-12 15:40:18
Also in: linux-clk

On Fri, 2021-03-12 at 07:44 +0100, Mike Looijmans wrote:
Met vriendelijke groet / kind regards,

Mike Looijmans
System Expert


TOPIC Embedded Products B.V.
Materiaalweg 4, 5681 RJ Best
The Netherlands

T: +31 (0) 499 33 69 69
E: mike.looijmans@topicproducts.com
W: 
https://urldefense.com/v3/__http://www.topicproducts.com__;!!IOGos0k!1ZKoWVwv09fDC-o4jRw92NZvHBl_3MOcBIPl8DLLDN0szJlo9IH0GC-6qH0-Pq1W-PA$
 

Please consider the environment before printing this e-mail
On 11-03-2021 23:24, Robert Hancock wrote:
quoted
Add a property to allow specifying that the external I2C IO pins are using
3.3V voltage thresholds rather than 1.8V.

Signed-off-by: Robert Hancock <redacted>
---
  drivers/clk/clk-si5341.c | 10 +++++++++-
  1 file changed, 9 insertions(+), 1 deletion(-)
diff --git a/drivers/clk/clk-si5341.c b/drivers/clk/clk-si5341.c
index 11740855bcde..4cd80ef389d2 100644
--- a/drivers/clk/clk-si5341.c
+++ b/drivers/clk/clk-si5341.c
@@ -81,6 +81,7 @@ struct clk_si5341 {
  	u8 num_synth;
  	u16 chip_id;
  	bool xaxb_ext_clk;
+	bool iovdd_33;
  };
  #define to_clk_si5341(_hw)	container_of(_hw, struct clk_si5341,
hw)
  
@@ -103,6 +104,7 @@ struct clk_si5341_output_config {
  #define SI5341_IN_SEL		0x0021
  #define SI5341_DEVICE_READY	0x00FE
  #define SI5341_XAXB_CFG		0x090E
+#define SI5341_IO_VDD_SEL	0x0943
  #define SI5341_IN_EN		0x0949
  #define SI5341_INX_TO_PFD_EN	0x094A
  
@@ -351,7 +353,6 @@ static const struct si5341_reg_default
si5341_reg_defaults[] = {
  	{ 0x0804, 0x00 }, /* Not in datasheet */
  	{ 0x090E, 0x02 }, /* XAXB_EXTCLK_EN=0 XAXB_PDNB=1 (use XTAL) */
  	{ 0x091C, 0x04 }, /* ZDM_EN=4 (Normal mode) */
-	{ 0x0943, 0x00 }, /* IO_VDD_SEL=0 (0=1v8, use 1=3v3) */
  	{ 0x0949, 0x00 }, /* IN_EN (disable input clocks) */
  	{ 0x094A, 0x00 }, /* INx_TO_PFD_EN (disabled) */
  	{ 0x0A02, 0x00 }, /* Not in datasheet */
@@ -1160,6 +1161,11 @@ static int si5341_finalize_defaults(struct
clk_si5341 *data)
  	int res;
  	u32 revision;
  
+	res = regmap_write(data->regmap, SI5341_IO_VDD_SEL,
+			   data->iovdd_33 ? 1 : 0);
+	if (res < 0)
+		return res;
+
  	res = regmap_read(data->regmap, SI5341_DEVICE_REV, &revision);
  	if (res < 0)
  		return res;
@@ -1565,6 +1571,8 @@ static int si5341_probe(struct i2c_client *client,
  	}
  	data->xaxb_ext_clk = of_property_read_bool(client->dev.of_node,
  						   "silabs,xaxb-ext-clk");
+	data->iovdd_33 = of_property_read_bool(client->dev.of_node,
+					       "silabs,iovdd-33");
  
Seems a waste to me to store this in the 'data' object forever while it 
is to be used only once during init and never again after that.
That is true, but it would then have to be passed down into the
si5341_finalize_defaults function separately and it would be inconsistent with
how all of the other configuration is handled. So I'm not sure it's worth
saving ~ 1 byte in the data object..
quoted
  	if (initialization_required) {
  		/* Populate the regmap cache in preparation for "cache only" */
Keyboard shortcuts
hback out one level
jnext message in thread
kprevious message in thread
ldrill in
Escclose help / fold thread tree
?toggle this help