clk: si5341: Add silabs,xaxb-ext-clk property
authorRobert Hancock <robert.hancock@calian.com>
Thu, 25 Mar 2021 19:26:41 +0000 (13:26 -0600)
committerStephen Boyd <sboyd@kernel.org>
Mon, 28 Jun 2021 02:58:14 +0000 (19:58 -0700)
Add a property to allow specifying that the device XA/XB pins are used for
an external clock input rather than for a clock crystal.

Signed-off-by: Robert Hancock <robert.hancock@calian.com>
Link: https://lore.kernel.org/r/20210325192643.2190069-8-robert.hancock@calian.com
Signed-off-by: Stephen Boyd <sboyd@kernel.org>
drivers/clk/clk-si5341.c

index 28ac7085f362652d3bf2cfaace9294cfe7f05758..c5ab4a5ae6a51f45d26ff806886ee55b34ae0a3a 100644 (file)
@@ -80,6 +80,7 @@ struct clk_si5341 {
        u8 num_outputs;
        u8 num_synth;
        u16 chip_id;
+       bool xaxb_ext_clk;
 };
 #define to_clk_si5341(_hw)     container_of(_hw, struct clk_si5341, hw)
 
@@ -529,9 +530,11 @@ static int si5341_clk_reparent(struct clk_si5341 *data, u8 index)
                if (err < 0)
                        return err;
 
-               /* Power up XTAL oscillator and buffer */
+               /* Power up XTAL oscillator and buffer, select clock mode */
                err = regmap_update_bits(data->regmap, SI5341_XAXB_CFG,
-                               SI5341_XAXB_CFG_PDNB, SI5341_XAXB_CFG_PDNB);
+                               SI5341_XAXB_CFG_PDNB | SI5341_XAXB_CFG_EXTCLK_EN,
+                               SI5341_XAXB_CFG_PDNB | (data->xaxb_ext_clk ?
+                                       SI5341_XAXB_CFG_EXTCLK_EN : 0));
                if (err < 0)
                        return err;
        }
@@ -1539,6 +1542,8 @@ static int si5341_probe(struct i2c_client *client,
 
                initialization_required = !err;
        }
+       data->xaxb_ext_clk = of_property_read_bool(client->dev.of_node,
+                                                  "silabs,xaxb-ext-clk");
 
        if (initialization_required) {
                /* Populate the regmap cache in preparation for "cache only" */