diff mbox

[RESEND,TAKE,3] clk: si5351: remove variant from platform_data

Message ID 1390682911-9022-1-git-send-email-sebastian.hesselbarth@gmail.com (mailing list archive)
State New, archived
Headers show

Commit Message

Sebastian Hesselbarth Jan. 25, 2014, 8:48 p.m. UTC
Commit 9807362bfe1748d9bb48eecb9261f1b1aaafea1c
  "clk: si5351: declare all device IDs for module loading"
removed the common i2c_device_id and introduced new ones for each variant
of the clock generator. Instead of exploiting that information in the driver,
it still depends on platform_data passing the chips .variant.

This removes the now redundant .variant from the platform_data and puts it in
i2c_device_id's .driver_data instead.

Signed-off-by: Sebastian Hesselbarth <sebastian.hesselbarth@gmail.com>
---
Mike,

this is the patch I mentioned during ARM summit ;). Still applies to
pre-v3.14-rc1 cleanly. Maybe it is time to take it now?

Cc: Mike Turquette <mturquette@linaro.org>
Cc: Jason Cooper <jason@lakedaemon.net>
Cc: Russell King <linux@arm.linux.org.uk>
Cc: linux-arm-kernel@lists.infradead.org
Cc: linux-kernel@vger.kernel.org
---
 drivers/clk/clk-si5351.c             |   28 ++++++++++++----------------
 drivers/clk/clk-si5351.h             |   14 ++++++++++++++
 include/linux/platform_data/si5351.h |   16 ----------------
 3 files changed, 26 insertions(+), 32 deletions(-)

Comments

Mike Turquette Jan. 27, 2014, 7:25 p.m. UTC | #1
Quoting Sebastian Hesselbarth (2014-01-25 12:48:31)
> Commit 9807362bfe1748d9bb48eecb9261f1b1aaafea1c
>   "clk: si5351: declare all device IDs for module loading"
> removed the common i2c_device_id and introduced new ones for each variant
> of the clock generator. Instead of exploiting that information in the driver,
> it still depends on platform_data passing the chips .variant.
> 
> This removes the now redundant .variant from the platform_data and puts it in
> i2c_device_id's .driver_data instead.
> 
> Signed-off-by: Sebastian Hesselbarth <sebastian.hesselbarth@gmail.com>
> ---
> Mike,
> 
> this is the patch I mentioned during ARM summit ;). Still applies to
> pre-v3.14-rc1 cleanly. Maybe it is time to take it now?

Hi Sebastian,

You're right, I overlooked this one. I've taken it in now.

Regards,
Mike

> 
> Cc: Mike Turquette <mturquette@linaro.org>
> Cc: Jason Cooper <jason@lakedaemon.net>
> Cc: Russell King <linux@arm.linux.org.uk>
> Cc: linux-arm-kernel@lists.infradead.org
> Cc: linux-kernel@vger.kernel.org
> ---
>  drivers/clk/clk-si5351.c             |   28 ++++++++++++----------------
>  drivers/clk/clk-si5351.h             |   14 ++++++++++++++
>  include/linux/platform_data/si5351.h |   16 ----------------
>  3 files changed, 26 insertions(+), 32 deletions(-)
> 
> diff --git a/drivers/clk/clk-si5351.c b/drivers/clk/clk-si5351.c
> index c50e837..b95aa09 100644
> --- a/drivers/clk/clk-si5351.c
> +++ b/drivers/clk/clk-si5351.c
> @@ -1111,11 +1111,11 @@ static const struct of_device_id si5351_dt_ids[] = {
>  };
>  MODULE_DEVICE_TABLE(of, si5351_dt_ids);
>  
> -static int si5351_dt_parse(struct i2c_client *client)
> +static int si5351_dt_parse(struct i2c_client *client,
> +                          enum si5351_variant variant)
>  {
>         struct device_node *child, *np = client->dev.of_node;
>         struct si5351_platform_data *pdata;
> -       const struct of_device_id *match;
>         struct property *prop;
>         const __be32 *p;
>         int num = 0;
> @@ -1124,15 +1124,10 @@ static int si5351_dt_parse(struct i2c_client *client)
>         if (np == NULL)
>                 return 0;
>  
> -       match = of_match_node(si5351_dt_ids, np);
> -       if (match == NULL)
> -               return -EINVAL;
> -
>         pdata = devm_kzalloc(&client->dev, sizeof(*pdata), GFP_KERNEL);
>         if (!pdata)
>                 return -ENOMEM;
>  
> -       pdata->variant = (enum si5351_variant)match->data;
>         pdata->clk_xtal = of_clk_get(np, 0);
>         if (!IS_ERR(pdata->clk_xtal))
>                 clk_put(pdata->clk_xtal);
> @@ -1163,7 +1158,7 @@ static int si5351_dt_parse(struct i2c_client *client)
>                         pdata->pll_src[num] = SI5351_PLL_SRC_XTAL;
>                         break;
>                 case 1:
> -                       if (pdata->variant != SI5351_VARIANT_C) {
> +                       if (variant != SI5351_VARIANT_C) {
>                                 dev_err(&client->dev,
>                                         "invalid parent %d for pll %d\n",
>                                         val, num);
> @@ -1187,7 +1182,7 @@ static int si5351_dt_parse(struct i2c_client *client)
>                 }
>  
>                 if (num >= 8 ||
> -                   (pdata->variant == SI5351_VARIANT_A3 && num >= 3)) {
> +                   (variant == SI5351_VARIANT_A3 && num >= 3)) {
>                         dev_err(&client->dev, "invalid clkout %d\n", num);
>                         return -EINVAL;
>                 }
> @@ -1226,7 +1221,7 @@ static int si5351_dt_parse(struct i2c_client *client)
>                                         SI5351_CLKOUT_SRC_XTAL;
>                                 break;
>                         case 3:
> -                               if (pdata->variant != SI5351_VARIANT_C) {
> +                               if (variant != SI5351_VARIANT_C) {
>                                         dev_err(&client->dev,
>                                                 "invalid parent %d for clkout %d\n",
>                                                 val, num);
> @@ -1307,6 +1302,7 @@ static int si5351_dt_parse(struct i2c_client *client)
>  static int si5351_i2c_probe(struct i2c_client *client,
>                             const struct i2c_device_id *id)
>  {
> +       enum si5351_variant variant = (enum si5351_variant)id->driver_data;
>         struct si5351_platform_data *pdata;
>         struct si5351_driver_data *drvdata;
>         struct clk_init_data init;
> @@ -1315,7 +1311,7 @@ static int si5351_i2c_probe(struct i2c_client *client,
>         u8 num_parents, num_clocks;
>         int ret, n;
>  
> -       ret = si5351_dt_parse(client);
> +       ret = si5351_dt_parse(client, variant);
>         if (ret)
>                 return ret;
>  
> @@ -1331,7 +1327,7 @@ static int si5351_i2c_probe(struct i2c_client *client,
>  
>         i2c_set_clientdata(client, drvdata);
>         drvdata->client = client;
> -       drvdata->variant = pdata->variant;
> +       drvdata->variant = variant;
>         drvdata->pxtal = pdata->clk_xtal;
>         drvdata->pclkin = pdata->clk_clkin;
>  
> @@ -1568,10 +1564,10 @@ static int si5351_i2c_probe(struct i2c_client *client,
>  }
>  
>  static const struct i2c_device_id si5351_i2c_ids[] = {
> -       { "si5351a", 0 },
> -       { "si5351a-msop", 0 },
> -       { "si5351b", 0 },
> -       { "si5351c", 0 },
> +       { "si5351a", SI5351_VARIANT_A },
> +       { "si5351a-msop", SI5351_VARIANT_A3 },
> +       { "si5351b", SI5351_VARIANT_B },
> +       { "si5351c", SI5351_VARIANT_C },
>         { }
>  };
>  MODULE_DEVICE_TABLE(i2c, si5351_i2c_ids);
> diff --git a/drivers/clk/clk-si5351.h b/drivers/clk/clk-si5351.h
> index c0dbf26..4d0746b 100644
> --- a/drivers/clk/clk-si5351.h
> +++ b/drivers/clk/clk-si5351.h
> @@ -153,4 +153,18 @@
>  #define  SI5351_XTAL_ENABLE                    (1<<6)
>  #define  SI5351_MULTISYNTH_ENABLE              (1<<4)
>  
> +/**
> + * enum si5351_variant - SiLabs Si5351 chip variant
> + * @SI5351_VARIANT_A: Si5351A (8 output clocks, XTAL input)
> + * @SI5351_VARIANT_A3: Si5351A MSOP10 (3 output clocks, XTAL input)
> + * @SI5351_VARIANT_B: Si5351B (8 output clocks, XTAL/VXCO input)
> + * @SI5351_VARIANT_C: Si5351C (8 output clocks, XTAL/CLKIN input)
> + */
> +enum si5351_variant {
> +       SI5351_VARIANT_A = 1,
> +       SI5351_VARIANT_A3 = 2,
> +       SI5351_VARIANT_B = 3,
> +       SI5351_VARIANT_C = 4,
> +};
> +
>  #endif
> diff --git a/include/linux/platform_data/si5351.h b/include/linux/platform_data/si5351.h
> index 5433439..a947ab8 100644
> --- a/include/linux/platform_data/si5351.h
> +++ b/include/linux/platform_data/si5351.h
> @@ -8,20 +8,6 @@
>  struct clk;
>  
>  /**
> - * enum si5351_variant - SiLabs Si5351 chip variant
> - * @SI5351_VARIANT_A: Si5351A (8 output clocks, XTAL input)
> - * @SI5351_VARIANT_A3: Si5351A MSOP10 (3 output clocks, XTAL input)
> - * @SI5351_VARIANT_B: Si5351B (8 output clocks, XTAL/VXCO input)
> - * @SI5351_VARIANT_C: Si5351C (8 output clocks, XTAL/CLKIN input)
> - */
> -enum si5351_variant {
> -       SI5351_VARIANT_A = 1,
> -       SI5351_VARIANT_A3 = 2,
> -       SI5351_VARIANT_B = 3,
> -       SI5351_VARIANT_C = 4,
> -};
> -
> -/**
>   * enum si5351_pll_src - Si5351 pll clock source
>   * @SI5351_PLL_SRC_DEFAULT: default, do not change eeprom config
>   * @SI5351_PLL_SRC_XTAL: pll source clock is XTAL input
> @@ -115,14 +101,12 @@ struct si5351_clkout_config {
>  
>  /**
>   * struct si5351_platform_data - Platform data for the Si5351 clock driver
> - * @variant: Si5351 chip variant
>   * @clk_xtal: xtal input clock
>   * @clk_clkin: clkin input clock
>   * @pll_src: array of pll source clock setting
>   * @clkout: array of clkout configuration
>   */
>  struct si5351_platform_data {
> -       enum si5351_variant variant;
>         struct clk *clk_xtal;
>         struct clk *clk_clkin;
>         enum si5351_pll_src pll_src[2];
> -- 
> 1.7.10.4
>
diff mbox

Patch

diff --git a/drivers/clk/clk-si5351.c b/drivers/clk/clk-si5351.c
index c50e837..b95aa09 100644
--- a/drivers/clk/clk-si5351.c
+++ b/drivers/clk/clk-si5351.c
@@ -1111,11 +1111,11 @@  static const struct of_device_id si5351_dt_ids[] = {
 };
 MODULE_DEVICE_TABLE(of, si5351_dt_ids);
 
-static int si5351_dt_parse(struct i2c_client *client)
+static int si5351_dt_parse(struct i2c_client *client,
+			   enum si5351_variant variant)
 {
 	struct device_node *child, *np = client->dev.of_node;
 	struct si5351_platform_data *pdata;
-	const struct of_device_id *match;
 	struct property *prop;
 	const __be32 *p;
 	int num = 0;
@@ -1124,15 +1124,10 @@  static int si5351_dt_parse(struct i2c_client *client)
 	if (np == NULL)
 		return 0;
 
-	match = of_match_node(si5351_dt_ids, np);
-	if (match == NULL)
-		return -EINVAL;
-
 	pdata = devm_kzalloc(&client->dev, sizeof(*pdata), GFP_KERNEL);
 	if (!pdata)
 		return -ENOMEM;
 
-	pdata->variant = (enum si5351_variant)match->data;
 	pdata->clk_xtal = of_clk_get(np, 0);
 	if (!IS_ERR(pdata->clk_xtal))
 		clk_put(pdata->clk_xtal);
@@ -1163,7 +1158,7 @@  static int si5351_dt_parse(struct i2c_client *client)
 			pdata->pll_src[num] = SI5351_PLL_SRC_XTAL;
 			break;
 		case 1:
-			if (pdata->variant != SI5351_VARIANT_C) {
+			if (variant != SI5351_VARIANT_C) {
 				dev_err(&client->dev,
 					"invalid parent %d for pll %d\n",
 					val, num);
@@ -1187,7 +1182,7 @@  static int si5351_dt_parse(struct i2c_client *client)
 		}
 
 		if (num >= 8 ||
-		    (pdata->variant == SI5351_VARIANT_A3 && num >= 3)) {
+		    (variant == SI5351_VARIANT_A3 && num >= 3)) {
 			dev_err(&client->dev, "invalid clkout %d\n", num);
 			return -EINVAL;
 		}
@@ -1226,7 +1221,7 @@  static int si5351_dt_parse(struct i2c_client *client)
 					SI5351_CLKOUT_SRC_XTAL;
 				break;
 			case 3:
-				if (pdata->variant != SI5351_VARIANT_C) {
+				if (variant != SI5351_VARIANT_C) {
 					dev_err(&client->dev,
 						"invalid parent %d for clkout %d\n",
 						val, num);
@@ -1307,6 +1302,7 @@  static int si5351_dt_parse(struct i2c_client *client)
 static int si5351_i2c_probe(struct i2c_client *client,
 			    const struct i2c_device_id *id)
 {
+	enum si5351_variant variant = (enum si5351_variant)id->driver_data;
 	struct si5351_platform_data *pdata;
 	struct si5351_driver_data *drvdata;
 	struct clk_init_data init;
@@ -1315,7 +1311,7 @@  static int si5351_i2c_probe(struct i2c_client *client,
 	u8 num_parents, num_clocks;
 	int ret, n;
 
-	ret = si5351_dt_parse(client);
+	ret = si5351_dt_parse(client, variant);
 	if (ret)
 		return ret;
 
@@ -1331,7 +1327,7 @@  static int si5351_i2c_probe(struct i2c_client *client,
 
 	i2c_set_clientdata(client, drvdata);
 	drvdata->client = client;
-	drvdata->variant = pdata->variant;
+	drvdata->variant = variant;
 	drvdata->pxtal = pdata->clk_xtal;
 	drvdata->pclkin = pdata->clk_clkin;
 
@@ -1568,10 +1564,10 @@  static int si5351_i2c_probe(struct i2c_client *client,
 }
 
 static const struct i2c_device_id si5351_i2c_ids[] = {
-	{ "si5351a", 0 },
-	{ "si5351a-msop", 0 },
-	{ "si5351b", 0 },
-	{ "si5351c", 0 },
+	{ "si5351a", SI5351_VARIANT_A },
+	{ "si5351a-msop", SI5351_VARIANT_A3 },
+	{ "si5351b", SI5351_VARIANT_B },
+	{ "si5351c", SI5351_VARIANT_C },
 	{ }
 };
 MODULE_DEVICE_TABLE(i2c, si5351_i2c_ids);
diff --git a/drivers/clk/clk-si5351.h b/drivers/clk/clk-si5351.h
index c0dbf26..4d0746b 100644
--- a/drivers/clk/clk-si5351.h
+++ b/drivers/clk/clk-si5351.h
@@ -153,4 +153,18 @@ 
 #define  SI5351_XTAL_ENABLE			(1<<6)
 #define  SI5351_MULTISYNTH_ENABLE		(1<<4)
 
+/**
+ * enum si5351_variant - SiLabs Si5351 chip variant
+ * @SI5351_VARIANT_A: Si5351A (8 output clocks, XTAL input)
+ * @SI5351_VARIANT_A3: Si5351A MSOP10 (3 output clocks, XTAL input)
+ * @SI5351_VARIANT_B: Si5351B (8 output clocks, XTAL/VXCO input)
+ * @SI5351_VARIANT_C: Si5351C (8 output clocks, XTAL/CLKIN input)
+ */
+enum si5351_variant {
+	SI5351_VARIANT_A = 1,
+	SI5351_VARIANT_A3 = 2,
+	SI5351_VARIANT_B = 3,
+	SI5351_VARIANT_C = 4,
+};
+
 #endif
diff --git a/include/linux/platform_data/si5351.h b/include/linux/platform_data/si5351.h
index 5433439..a947ab8 100644
--- a/include/linux/platform_data/si5351.h
+++ b/include/linux/platform_data/si5351.h
@@ -8,20 +8,6 @@ 
 struct clk;
 
 /**
- * enum si5351_variant - SiLabs Si5351 chip variant
- * @SI5351_VARIANT_A: Si5351A (8 output clocks, XTAL input)
- * @SI5351_VARIANT_A3: Si5351A MSOP10 (3 output clocks, XTAL input)
- * @SI5351_VARIANT_B: Si5351B (8 output clocks, XTAL/VXCO input)
- * @SI5351_VARIANT_C: Si5351C (8 output clocks, XTAL/CLKIN input)
- */
-enum si5351_variant {
-	SI5351_VARIANT_A = 1,
-	SI5351_VARIANT_A3 = 2,
-	SI5351_VARIANT_B = 3,
-	SI5351_VARIANT_C = 4,
-};
-
-/**
  * enum si5351_pll_src - Si5351 pll clock source
  * @SI5351_PLL_SRC_DEFAULT: default, do not change eeprom config
  * @SI5351_PLL_SRC_XTAL: pll source clock is XTAL input
@@ -115,14 +101,12 @@  struct si5351_clkout_config {
 
 /**
  * struct si5351_platform_data - Platform data for the Si5351 clock driver
- * @variant: Si5351 chip variant
  * @clk_xtal: xtal input clock
  * @clk_clkin: clkin input clock
  * @pll_src: array of pll source clock setting
  * @clkout: array of clkout configuration
  */
 struct si5351_platform_data {
-	enum si5351_variant variant;
 	struct clk *clk_xtal;
 	struct clk *clk_clkin;
 	enum si5351_pll_src pll_src[2];