public inbox for linux-acpi@vger.kernel.org
 help / color / mirror / Atom feed
* [PATCH 0/4] ACPI / LPSS: clock improvements
@ 2014-09-02  7:55 Heikki Krogerus
  2014-09-02  7:55 ` [PATCH 1/4] ACPI / LPSS: introduce flags Heikki Krogerus
                   ` (5 more replies)
  0 siblings, 6 replies; 12+ messages in thread
From: Heikki Krogerus @ 2014-09-02  7:55 UTC (permalink / raw)
  To: Rafael J. Wysocki; +Cc: Andy Shevchenko, Mika Westerberg, linux-acpi

Minor improvements mainly related to how the clocks are handled.


Heikki Krogerus (4):
  ACPI / LPSS: introduce flags
  ACPI / LPSS: drop clkdev_name member from lpss_device_desc
  ACPI / LPSS: support for 133MHz I2C source clock on Baytrail
  ACPI / LPSS: remove struct lpss_shared_clock

 drivers/acpi/acpi_lpss.c | 145 ++++++++++++++---------------------------------
 1 file changed, 43 insertions(+), 102 deletions(-)

-- 
2.1.0


^ permalink raw reply	[flat|nested] 12+ messages in thread

* [PATCH 1/4] ACPI / LPSS: introduce flags
  2014-09-02  7:55 [PATCH 0/4] ACPI / LPSS: clock improvements Heikki Krogerus
@ 2014-09-02  7:55 ` Heikki Krogerus
  2014-09-02  8:45   ` Andy Shevchenko
  2014-09-02  7:55 ` [PATCH 2/4] ACPI / LPSS: drop clkdev_name member from lpss_device_desc Heikki Krogerus
                   ` (4 subsequent siblings)
  5 siblings, 1 reply; 12+ messages in thread
From: Heikki Krogerus @ 2014-09-02  7:55 UTC (permalink / raw)
  To: Rafael J. Wysocki; +Cc: Andy Shevchenko, Mika Westerberg, linux-acpi

Replace the booleans with a single flags member variable.

Signed-off-by: Heikki Krogerus <heikki.krogerus@linux.intel.com>
---
 drivers/acpi/acpi_lpss.c | 79 ++++++++++++++++++------------------------------
 1 file changed, 29 insertions(+), 50 deletions(-)

diff --git a/drivers/acpi/acpi_lpss.c b/drivers/acpi/acpi_lpss.c
index 9dfec48..4723a0e 100644
--- a/drivers/acpi/acpi_lpss.c
+++ b/drivers/acpi/acpi_lpss.c
@@ -54,6 +54,13 @@ ACPI_MODULE_NAME("acpi_lpss");
 
 #define LPSS_PRV_REG_COUNT		9
 
+/* LPSS Flags */
+#define LPSS_CLK			BIT(0)
+#define LPSS_CLK_GATE			BIT(1)
+#define LPSS_CLK_DIVIDER		BIT(2)
+#define LPSS_LTR			BIT(3)
+#define LPSS_SAVE_CTX			BIT(4)
+
 struct lpss_shared_clock {
 	const char *name;
 	unsigned long rate;
@@ -63,21 +70,17 @@ struct lpss_shared_clock {
 struct lpss_private_data;
 
 struct lpss_device_desc {
-	bool clk_required;
 	const char *clkdev_name;
-	bool ltr_required;
+	unsigned int flags;
 	unsigned int prv_offset;
 	size_t prv_size_override;
-	bool clk_divider;
-	bool clk_gate;
-	bool save_ctx;
 	struct lpss_shared_clock *shared_clock;
 	void (*setup)(struct lpss_private_data *pdata);
 };
 
 static struct lpss_device_desc lpss_dma_desc = {
-	.clk_required = true,
 	.clkdev_name = "hclk",
+	.flags = LPSS_CLK,
 };
 
 struct lpss_private_data {
@@ -113,42 +116,26 @@ static void lpss_i2c_setup(struct lpss_private_data *pdata)
 	writel(val, pdata->mmio_base + offset);
 }
 
-static struct lpss_device_desc wpt_dev_desc = {
-	.clk_required = true,
-	.prv_offset = 0x800,
-	.ltr_required = true,
-	.clk_divider = true,
-	.clk_gate = true,
-};
-
 static struct lpss_device_desc lpt_dev_desc = {
-	.clk_required = true,
+	.flags = LPSS_CLK | LPSS_CLK_GATE | LPSS_CLK_DIVIDER | LPSS_LTR,
 	.prv_offset = 0x800,
-	.ltr_required = true,
-	.clk_divider = true,
-	.clk_gate = true,
 };
 
 static struct lpss_device_desc lpt_i2c_dev_desc = {
-	.clk_required = true,
+	.flags = LPSS_CLK | LPSS_CLK_GATE | LPSS_LTR,
 	.prv_offset = 0x800,
-	.ltr_required = true,
-	.clk_gate = true,
 };
 
 static struct lpss_device_desc lpt_uart_dev_desc = {
-	.clk_required = true,
+	.flags = LPSS_CLK | LPSS_CLK_GATE | LPSS_CLK_DIVIDER | LPSS_LTR,
 	.prv_offset = 0x800,
-	.ltr_required = true,
-	.clk_divider = true,
-	.clk_gate = true,
 	.setup = lpss_uart_setup,
 };
 
 static struct lpss_device_desc lpt_sdio_dev_desc = {
+	.flags = LPSS_LTR,
 	.prv_offset = 0x1000,
 	.prv_size_override = 0x1018,
-	.ltr_required = true,
 };
 
 static struct lpss_shared_clock pwm_clock = {
@@ -157,30 +144,23 @@ static struct lpss_shared_clock pwm_clock = {
 };
 
 static struct lpss_device_desc byt_pwm_dev_desc = {
-	.clk_required = true,
-	.save_ctx = true,
+	.flags = LPSS_CLK | LPSS_SAVE_CTX,
 	.shared_clock = &pwm_clock,
 };
 
 static struct lpss_device_desc byt_uart_dev_desc = {
-	.clk_required = true,
+	.flags = LPSS_CLK | LPSS_CLK_GATE | LPSS_CLK_DIVIDER | LPSS_SAVE_CTX,
 	.prv_offset = 0x800,
-	.clk_divider = true,
-	.clk_gate = true,
-	.save_ctx = true,
 	.setup = lpss_uart_setup,
 };
 
 static struct lpss_device_desc byt_spi_dev_desc = {
-	.clk_required = true,
+	.flags = LPSS_CLK | LPSS_CLK_GATE | LPSS_CLK_DIVIDER | LPSS_SAVE_CTX,
 	.prv_offset = 0x400,
-	.clk_divider = true,
-	.clk_gate = true,
-	.save_ctx = true,
 };
 
 static struct lpss_device_desc byt_sdio_dev_desc = {
-	.clk_required = true,
+	.flags = LPSS_CLK,
 };
 
 static struct lpss_shared_clock i2c_clock = {
@@ -189,9 +169,8 @@ static struct lpss_shared_clock i2c_clock = {
 };
 
 static struct lpss_device_desc byt_i2c_dev_desc = {
-	.clk_required = true,
+	.flags = LPSS_CLK | LPSS_SAVE_CTX,
 	.prv_offset = 0x800,
-	.save_ctx = true,
 	.shared_clock = &i2c_clock,
 	.setup = lpss_i2c_setup,
 };
@@ -202,8 +181,7 @@ static struct lpss_shared_clock bsw_pwm_clock = {
 };
 
 static struct lpss_device_desc bsw_pwm_dev_desc = {
-	.clk_required = true,
-	.save_ctx = true,
+	.flags = LPSS_CLK | LPSS_SAVE_CTX,
 	.shared_clock = &bsw_pwm_clock,
 };
 
@@ -251,7 +229,8 @@ static const struct acpi_device_id acpi_lpss_device_ids[] = {
 	{ "INT3436", LPSS_ADDR(lpt_sdio_dev_desc) },
 	{ "INT3437", },
 
-	{ "INT3438", LPSS_ADDR(wpt_dev_desc) },
+	/* Wildcat Point LPSS devices */
+	{ "INT3438", LPSS_ADDR(lpt_dev_desc) },
 
 	{ }
 };
@@ -314,13 +293,13 @@ static int register_device_clock(struct acpi_device *adev,
 		parent = shared_clock->name;
 	}
 
-	if (dev_desc->clk_gate) {
+	if (dev_desc->flags & LPSS_CLK_GATE) {
 		clk = clk_register_gate(NULL, devname, parent, 0,
 					prv_base, 0, 0, NULL);
 		parent = devname;
 	}
 
-	if (dev_desc->clk_divider) {
+	if (dev_desc->flags & LPSS_CLK_DIVIDER) {
 		/* Prevent division by zero */
 		if (!readl(prv_base))
 			writel(LPSS_CLK_DIVIDER_DEF_MASK, prv_base);
@@ -392,7 +371,7 @@ static int acpi_lpss_create_device(struct acpi_device *adev,
 
 	pdata->dev_desc = dev_desc;
 
-	if (dev_desc->clk_required) {
+	if (dev_desc->flags & LPSS_CLK) {
 		ret = register_device_clock(adev, pdata);
 		if (ret) {
 			/* Skip the device, but continue the namespace scan. */
@@ -693,19 +672,19 @@ static int acpi_lpss_platform_notify(struct notifier_block *nb,
 
 	switch (action) {
 	case BUS_NOTIFY_BOUND_DRIVER:
-		if (pdata->dev_desc->save_ctx)
+		if (pdata->dev_desc->flags & LPSS_SAVE_CTX)
 			pdev->dev.pm_domain = &acpi_lpss_pm_domain;
 		break;
 	case BUS_NOTIFY_UNBOUND_DRIVER:
-		if (pdata->dev_desc->save_ctx)
+		if (pdata->dev_desc->flags & LPSS_SAVE_CTX)
 			pdev->dev.pm_domain = NULL;
 		break;
 	case BUS_NOTIFY_ADD_DEVICE:
-		if (pdata->dev_desc->ltr_required)
+		if (pdata->dev_desc->flags & LPSS_LTR)
 			return sysfs_create_group(&pdev->dev.kobj,
 						  &lpss_attr_group);
 	case BUS_NOTIFY_DEL_DEVICE:
-		if (pdata->dev_desc->ltr_required)
+		if (pdata->dev_desc->flags & LPSS_LTR)
 			sysfs_remove_group(&pdev->dev.kobj, &lpss_attr_group);
 	default:
 		break;
@@ -722,7 +701,7 @@ static void acpi_lpss_bind(struct device *dev)
 {
 	struct lpss_private_data *pdata = acpi_driver_data(ACPI_COMPANION(dev));
 
-	if (!pdata || !pdata->mmio_base || !pdata->dev_desc->ltr_required)
+	if (!pdata || !pdata->mmio_base || !(pdata->dev_desc->flags & LPSS_LTR))
 		return;
 
 	if (pdata->mmio_size >= pdata->dev_desc->prv_offset + LPSS_LTR_SIZE)
-- 
2.1.0


^ permalink raw reply related	[flat|nested] 12+ messages in thread

* [PATCH 2/4] ACPI / LPSS: drop clkdev_name member from lpss_device_desc
  2014-09-02  7:55 [PATCH 0/4] ACPI / LPSS: clock improvements Heikki Krogerus
  2014-09-02  7:55 ` [PATCH 1/4] ACPI / LPSS: introduce flags Heikki Krogerus
@ 2014-09-02  7:55 ` Heikki Krogerus
  2014-09-02  8:43   ` Andy Shevchenko
  2014-09-02  7:55 ` [PATCH 3/4] ACPI / LPSS: support for 133MHz I2C source clock on Baytrail Heikki Krogerus
                   ` (3 subsequent siblings)
  5 siblings, 1 reply; 12+ messages in thread
From: Heikki Krogerus @ 2014-09-02  7:55 UTC (permalink / raw)
  To: Rafael J. Wysocki; +Cc: Andy Shevchenko, Mika Westerberg, linux-acpi

It was used to provide the correct con_id for the dma
driver, but it's not needed. Even if the driver requests a
clock with the con_id, it still gets the correct clock. The
device name is enough to match a single clock.

Signed-off-by: Heikki Krogerus <heikki.krogerus@linux.intel.com>
---
 drivers/acpi/acpi_lpss.c | 9 +--------
 1 file changed, 1 insertion(+), 8 deletions(-)

diff --git a/drivers/acpi/acpi_lpss.c b/drivers/acpi/acpi_lpss.c
index 4723a0e..db3498b 100644
--- a/drivers/acpi/acpi_lpss.c
+++ b/drivers/acpi/acpi_lpss.c
@@ -70,7 +70,6 @@ struct lpss_shared_clock {
 struct lpss_private_data;
 
 struct lpss_device_desc {
-	const char *clkdev_name;
 	unsigned int flags;
 	unsigned int prv_offset;
 	size_t prv_size_override;
@@ -79,7 +78,6 @@ struct lpss_device_desc {
 };
 
 static struct lpss_device_desc lpss_dma_desc = {
-	.clkdev_name = "hclk",
 	.flags = LPSS_CLK,
 };
 
@@ -268,12 +266,7 @@ static int register_device_clock(struct acpi_device *adev,
 	clk_data = platform_get_drvdata(lpss_clk_dev);
 	if (!clk_data)
 		return -ENODEV;
-
-	if (dev_desc->clkdev_name) {
-		clk_register_clkdev(clk_data->clk, dev_desc->clkdev_name,
-				    devname);
-		return 0;
-	}
+	clk = clk_data->clk;
 
 	if (!pdata->mmio_base
 	    || pdata->mmio_size < dev_desc->prv_offset + LPSS_CLK_SIZE)
-- 
2.1.0


^ permalink raw reply related	[flat|nested] 12+ messages in thread

* [PATCH 3/4] ACPI / LPSS: support for 133MHz I2C source clock on Baytrail
  2014-09-02  7:55 [PATCH 0/4] ACPI / LPSS: clock improvements Heikki Krogerus
  2014-09-02  7:55 ` [PATCH 1/4] ACPI / LPSS: introduce flags Heikki Krogerus
  2014-09-02  7:55 ` [PATCH 2/4] ACPI / LPSS: drop clkdev_name member from lpss_device_desc Heikki Krogerus
@ 2014-09-02  7:55 ` Heikki Krogerus
  2014-09-02  7:55 ` [PATCH 4/4] ACPI / LPSS: remove struct lpss_shared_clock Heikki Krogerus
                   ` (2 subsequent siblings)
  5 siblings, 0 replies; 12+ messages in thread
From: Heikki Krogerus @ 2014-09-02  7:55 UTC (permalink / raw)
  To: Rafael J. Wysocki; +Cc: Andy Shevchenko, Mika Westerberg, linux-acpi

The I2C controllers on Baytrail can get the clock from
100MHz or 133MHz source clock. The first bits in the private
clock parameter register indicates which one is being used.

Signed-off-by: Heikki Krogerus <heikki.krogerus@linux.intel.com>
---
 drivers/acpi/acpi_lpss.c | 28 ++++++++++++++++------------
 1 file changed, 16 insertions(+), 12 deletions(-)

diff --git a/drivers/acpi/acpi_lpss.c b/drivers/acpi/acpi_lpss.c
index db3498b..b693098 100644
--- a/drivers/acpi/acpi_lpss.c
+++ b/drivers/acpi/acpi_lpss.c
@@ -84,6 +84,7 @@ static struct lpss_device_desc lpss_dma_desc = {
 struct lpss_private_data {
 	void __iomem *mmio_base;
 	resource_size_t mmio_size;
+	unsigned int fixed_clk_rate;
 	struct clk *clk;
 	const struct lpss_device_desc *dev_desc;
 	u32 prv_reg_ctx[LPSS_PRV_REG_COUNT];
@@ -103,7 +104,7 @@ static void lpss_uart_setup(struct lpss_private_data *pdata)
 	writel(reg | LPSS_GENERAL_UART_RTS_OVRD, pdata->mmio_base + offset);
 }
 
-static void lpss_i2c_setup(struct lpss_private_data *pdata)
+static void byt_i2c_setup(struct lpss_private_data *pdata)
 {
 	unsigned int offset;
 	u32 val;
@@ -112,6 +113,9 @@ static void lpss_i2c_setup(struct lpss_private_data *pdata)
 	val = readl(pdata->mmio_base + offset);
 	val |= LPSS_RESETS_RESET_APB | LPSS_RESETS_RESET_FUNC;
 	writel(val, pdata->mmio_base + offset);
+
+	if (readl(pdata->mmio_base + pdata->dev_desc->prv_offset))
+		pdata->fixed_clk_rate = 133000000;
 }
 
 static struct lpss_device_desc lpt_dev_desc = {
@@ -161,16 +165,10 @@ static struct lpss_device_desc byt_sdio_dev_desc = {
 	.flags = LPSS_CLK,
 };
 
-static struct lpss_shared_clock i2c_clock = {
-	.name = "i2c_clk",
-	.rate = 100000000,
-};
-
 static struct lpss_device_desc byt_i2c_dev_desc = {
 	.flags = LPSS_CLK | LPSS_SAVE_CTX,
 	.prv_offset = 0x800,
-	.shared_clock = &i2c_clock,
-	.setup = lpss_i2c_setup,
+	.setup = byt_i2c_setup,
 };
 
 static struct lpss_shared_clock bsw_pwm_clock = {
@@ -286,6 +284,12 @@ static int register_device_clock(struct acpi_device *adev,
 		parent = shared_clock->name;
 	}
 
+	if (pdata->fixed_clk_rate) {
+		clk = clk_register_fixed_rate(NULL, devname, parent, 0,
+					      pdata->fixed_clk_rate);
+		goto out;
+	}
+
 	if (dev_desc->flags & LPSS_CLK_GATE) {
 		clk = clk_register_gate(NULL, devname, parent, 0,
 					prv_base, 0, 0, NULL);
@@ -316,7 +320,7 @@ static int register_device_clock(struct acpi_device *adev,
 		kfree(parent);
 		kfree(clk_name);
 	}
-
+out:
 	if (IS_ERR(clk))
 		return PTR_ERR(clk);
 
@@ -364,6 +368,9 @@ static int acpi_lpss_create_device(struct acpi_device *adev,
 
 	pdata->dev_desc = dev_desc;
 
+	if (dev_desc->setup)
+		dev_desc->setup(pdata);
+
 	if (dev_desc->flags & LPSS_CLK) {
 		ret = register_device_clock(adev, pdata);
 		if (ret) {
@@ -385,9 +392,6 @@ static int acpi_lpss_create_device(struct acpi_device *adev,
 		goto err_out;
 	}
 
-	if (dev_desc->setup)
-		dev_desc->setup(pdata);
-
 	adev->driver_data = pdata;
 	pdev = acpi_create_platform_device(adev);
 	if (!IS_ERR_OR_NULL(pdev)) {
-- 
2.1.0


^ permalink raw reply related	[flat|nested] 12+ messages in thread

* [PATCH 4/4] ACPI / LPSS: remove struct lpss_shared_clock
  2014-09-02  7:55 [PATCH 0/4] ACPI / LPSS: clock improvements Heikki Krogerus
                   ` (2 preceding siblings ...)
  2014-09-02  7:55 ` [PATCH 3/4] ACPI / LPSS: support for 133MHz I2C source clock on Baytrail Heikki Krogerus
@ 2014-09-02  7:55 ` Heikki Krogerus
  2014-09-02  8:47   ` Andy Shevchenko
  2014-09-02 10:46 ` [PATCH 0/4] ACPI / LPSS: clock improvements Mika Westerberg
  2014-09-03 21:49 ` Rafael J. Wysocki
  5 siblings, 1 reply; 12+ messages in thread
From: Heikki Krogerus @ 2014-09-02  7:55 UTC (permalink / raw)
  To: Rafael J. Wysocki; +Cc: Andy Shevchenko, Mika Westerberg, linux-acpi

Nothing requires it anymore. The PWM driver no longer
uses clk framework to get the rate.

Signed-off-by: Heikki Krogerus <heikki.krogerus@linux.intel.com>
---
 drivers/acpi/acpi_lpss.c | 39 ++-------------------------------------
 1 file changed, 2 insertions(+), 37 deletions(-)

diff --git a/drivers/acpi/acpi_lpss.c b/drivers/acpi/acpi_lpss.c
index b693098..bcbdbd2 100644
--- a/drivers/acpi/acpi_lpss.c
+++ b/drivers/acpi/acpi_lpss.c
@@ -61,19 +61,12 @@ ACPI_MODULE_NAME("acpi_lpss");
 #define LPSS_LTR			BIT(3)
 #define LPSS_SAVE_CTX			BIT(4)
 
-struct lpss_shared_clock {
-	const char *name;
-	unsigned long rate;
-	struct clk *clk;
-};
-
 struct lpss_private_data;
 
 struct lpss_device_desc {
 	unsigned int flags;
 	unsigned int prv_offset;
 	size_t prv_size_override;
-	struct lpss_shared_clock *shared_clock;
 	void (*setup)(struct lpss_private_data *pdata);
 };
 
@@ -140,14 +133,8 @@ static struct lpss_device_desc lpt_sdio_dev_desc = {
 	.prv_size_override = 0x1018,
 };
 
-static struct lpss_shared_clock pwm_clock = {
-	.name = "pwm_clk",
-	.rate = 25000000,
-};
-
 static struct lpss_device_desc byt_pwm_dev_desc = {
-	.flags = LPSS_CLK | LPSS_SAVE_CTX,
-	.shared_clock = &pwm_clock,
+	.flags = LPSS_SAVE_CTX,
 };
 
 static struct lpss_device_desc byt_uart_dev_desc = {
@@ -171,16 +158,6 @@ static struct lpss_device_desc byt_i2c_dev_desc = {
 	.setup = byt_i2c_setup,
 };
 
-static struct lpss_shared_clock bsw_pwm_clock = {
-	.name = "pwm_clk",
-	.rate = 19200000,
-};
-
-static struct lpss_device_desc bsw_pwm_dev_desc = {
-	.flags = LPSS_CLK | LPSS_SAVE_CTX,
-	.shared_clock = &bsw_pwm_clock,
-};
-
 #else
 
 #define LPSS_ADDR(desc) (0UL)
@@ -211,7 +188,7 @@ static const struct acpi_device_id acpi_lpss_device_ids[] = {
 	{ "INT33FC", },
 
 	/* Braswell LPSS devices */
-	{ "80862288", LPSS_ADDR(bsw_pwm_dev_desc) },
+	{ "80862288", LPSS_ADDR(byt_pwm_dev_desc) },
 	{ "8086228A", LPSS_ADDR(byt_uart_dev_desc) },
 	{ "8086228E", LPSS_ADDR(byt_spi_dev_desc) },
 	{ "808622C1", LPSS_ADDR(byt_i2c_dev_desc) },
@@ -251,7 +228,6 @@ static int register_device_clock(struct acpi_device *adev,
 				 struct lpss_private_data *pdata)
 {
 	const struct lpss_device_desc *dev_desc = pdata->dev_desc;
-	struct lpss_shared_clock *shared_clock = dev_desc->shared_clock;
 	const char *devname = dev_name(&adev->dev);
 	struct clk *clk = ERR_PTR(-ENODEV);
 	struct lpss_clk_data *clk_data;
@@ -273,17 +249,6 @@ static int register_device_clock(struct acpi_device *adev,
 	parent = clk_data->name;
 	prv_base = pdata->mmio_base + dev_desc->prv_offset;
 
-	if (shared_clock) {
-		clk = shared_clock->clk;
-		if (!clk) {
-			clk = clk_register_fixed_rate(NULL, shared_clock->name,
-						      "lpss_clk", 0,
-						      shared_clock->rate);
-			shared_clock->clk = clk;
-		}
-		parent = shared_clock->name;
-	}
-
 	if (pdata->fixed_clk_rate) {
 		clk = clk_register_fixed_rate(NULL, devname, parent, 0,
 					      pdata->fixed_clk_rate);
-- 
2.1.0


^ permalink raw reply related	[flat|nested] 12+ messages in thread

* Re: [PATCH 2/4] ACPI / LPSS: drop clkdev_name member from lpss_device_desc
  2014-09-02  7:55 ` [PATCH 2/4] ACPI / LPSS: drop clkdev_name member from lpss_device_desc Heikki Krogerus
@ 2014-09-02  8:43   ` Andy Shevchenko
  2014-09-02 10:34     ` Heikki Krogerus
  0 siblings, 1 reply; 12+ messages in thread
From: Andy Shevchenko @ 2014-09-02  8:43 UTC (permalink / raw)
  To: Heikki Krogerus; +Cc: Rafael J. Wysocki, Mika Westerberg, linux-acpi

On Tue, 2014-09-02 at 10:55 +0300, Heikki Krogerus wrote:
> It was used to provide the correct con_id for the dma
> driver, but it's not needed. Even if the driver requests a
> clock with the con_id, it still gets the correct clock. The

Maybe with -> without?

> device name is enough to match a single clock.

Since it affects DW DMA driver
Acked-by: Andy Shevchenko <andriy.shevchenko@linux.intel.com>

> 
> Signed-off-by: Heikki Krogerus <heikki.krogerus@linux.intel.com>
> ---
>  drivers/acpi/acpi_lpss.c | 9 +--------
>  1 file changed, 1 insertion(+), 8 deletions(-)
> 
> diff --git a/drivers/acpi/acpi_lpss.c b/drivers/acpi/acpi_lpss.c
> index 4723a0e..db3498b 100644
> --- a/drivers/acpi/acpi_lpss.c
> +++ b/drivers/acpi/acpi_lpss.c
> @@ -70,7 +70,6 @@ struct lpss_shared_clock {
>  struct lpss_private_data;
>  
>  struct lpss_device_desc {
> -	const char *clkdev_name;
>  	unsigned int flags;
>  	unsigned int prv_offset;
>  	size_t prv_size_override;
> @@ -79,7 +78,6 @@ struct lpss_device_desc {
>  };
>  
>  static struct lpss_device_desc lpss_dma_desc = {
> -	.clkdev_name = "hclk",
>  	.flags = LPSS_CLK,
>  };
>  
> @@ -268,12 +266,7 @@ static int register_device_clock(struct acpi_device *adev,
>  	clk_data = platform_get_drvdata(lpss_clk_dev);
>  	if (!clk_data)
>  		return -ENODEV;
> -
> -	if (dev_desc->clkdev_name) {
> -		clk_register_clkdev(clk_data->clk, dev_desc->clkdev_name,
> -				    devname);
> -		return 0;
> -	}
> +	clk = clk_data->clk;
>  
>  	if (!pdata->mmio_base
>  	    || pdata->mmio_size < dev_desc->prv_offset + LPSS_CLK_SIZE)


-- 
Andy Shevchenko <andriy.shevchenko@linux.intel.com>
Intel Finland Oy


^ permalink raw reply	[flat|nested] 12+ messages in thread

* Re: [PATCH 1/4] ACPI / LPSS: introduce flags
  2014-09-02  7:55 ` [PATCH 1/4] ACPI / LPSS: introduce flags Heikki Krogerus
@ 2014-09-02  8:45   ` Andy Shevchenko
  0 siblings, 0 replies; 12+ messages in thread
From: Andy Shevchenko @ 2014-09-02  8:45 UTC (permalink / raw)
  To: Heikki Krogerus; +Cc: Rafael J. Wysocki, Mika Westerberg, linux-acpi

On Tue, 2014-09-02 at 10:55 +0300, Heikki Krogerus wrote:
> Replace the booleans with a single flags member variable.
> 
> Signed-off-by: Heikki Krogerus <heikki.krogerus@linux.intel.com>

Reviewed-by: Andy Shevchenko <andriy.shevchenko@linux.intel.com>

> ---
>  drivers/acpi/acpi_lpss.c | 79 ++++++++++++++++++------------------------------
>  1 file changed, 29 insertions(+), 50 deletions(-)
> 
> diff --git a/drivers/acpi/acpi_lpss.c b/drivers/acpi/acpi_lpss.c
> index 9dfec48..4723a0e 100644
> --- a/drivers/acpi/acpi_lpss.c
> +++ b/drivers/acpi/acpi_lpss.c
> @@ -54,6 +54,13 @@ ACPI_MODULE_NAME("acpi_lpss");
>  
>  #define LPSS_PRV_REG_COUNT		9
>  
> +/* LPSS Flags */
> +#define LPSS_CLK			BIT(0)
> +#define LPSS_CLK_GATE			BIT(1)
> +#define LPSS_CLK_DIVIDER		BIT(2)
> +#define LPSS_LTR			BIT(3)
> +#define LPSS_SAVE_CTX			BIT(4)
> +
>  struct lpss_shared_clock {
>  	const char *name;
>  	unsigned long rate;
> @@ -63,21 +70,17 @@ struct lpss_shared_clock {
>  struct lpss_private_data;
>  
>  struct lpss_device_desc {
> -	bool clk_required;
>  	const char *clkdev_name;
> -	bool ltr_required;
> +	unsigned int flags;
>  	unsigned int prv_offset;
>  	size_t prv_size_override;
> -	bool clk_divider;
> -	bool clk_gate;
> -	bool save_ctx;
>  	struct lpss_shared_clock *shared_clock;
>  	void (*setup)(struct lpss_private_data *pdata);
>  };
>  
>  static struct lpss_device_desc lpss_dma_desc = {
> -	.clk_required = true,
>  	.clkdev_name = "hclk",
> +	.flags = LPSS_CLK,
>  };
>  
>  struct lpss_private_data {
> @@ -113,42 +116,26 @@ static void lpss_i2c_setup(struct lpss_private_data *pdata)
>  	writel(val, pdata->mmio_base + offset);
>  }
>  
> -static struct lpss_device_desc wpt_dev_desc = {
> -	.clk_required = true,
> -	.prv_offset = 0x800,
> -	.ltr_required = true,
> -	.clk_divider = true,
> -	.clk_gate = true,
> -};
> -
>  static struct lpss_device_desc lpt_dev_desc = {
> -	.clk_required = true,
> +	.flags = LPSS_CLK | LPSS_CLK_GATE | LPSS_CLK_DIVIDER | LPSS_LTR,
>  	.prv_offset = 0x800,
> -	.ltr_required = true,
> -	.clk_divider = true,
> -	.clk_gate = true,
>  };
>  
>  static struct lpss_device_desc lpt_i2c_dev_desc = {
> -	.clk_required = true,
> +	.flags = LPSS_CLK | LPSS_CLK_GATE | LPSS_LTR,
>  	.prv_offset = 0x800,
> -	.ltr_required = true,
> -	.clk_gate = true,
>  };
>  
>  static struct lpss_device_desc lpt_uart_dev_desc = {
> -	.clk_required = true,
> +	.flags = LPSS_CLK | LPSS_CLK_GATE | LPSS_CLK_DIVIDER | LPSS_LTR,
>  	.prv_offset = 0x800,
> -	.ltr_required = true,
> -	.clk_divider = true,
> -	.clk_gate = true,
>  	.setup = lpss_uart_setup,
>  };
>  
>  static struct lpss_device_desc lpt_sdio_dev_desc = {
> +	.flags = LPSS_LTR,
>  	.prv_offset = 0x1000,
>  	.prv_size_override = 0x1018,
> -	.ltr_required = true,
>  };
>  
>  static struct lpss_shared_clock pwm_clock = {
> @@ -157,30 +144,23 @@ static struct lpss_shared_clock pwm_clock = {
>  };
>  
>  static struct lpss_device_desc byt_pwm_dev_desc = {
> -	.clk_required = true,
> -	.save_ctx = true,
> +	.flags = LPSS_CLK | LPSS_SAVE_CTX,
>  	.shared_clock = &pwm_clock,
>  };
>  
>  static struct lpss_device_desc byt_uart_dev_desc = {
> -	.clk_required = true,
> +	.flags = LPSS_CLK | LPSS_CLK_GATE | LPSS_CLK_DIVIDER | LPSS_SAVE_CTX,
>  	.prv_offset = 0x800,
> -	.clk_divider = true,
> -	.clk_gate = true,
> -	.save_ctx = true,
>  	.setup = lpss_uart_setup,
>  };
>  
>  static struct lpss_device_desc byt_spi_dev_desc = {
> -	.clk_required = true,
> +	.flags = LPSS_CLK | LPSS_CLK_GATE | LPSS_CLK_DIVIDER | LPSS_SAVE_CTX,
>  	.prv_offset = 0x400,
> -	.clk_divider = true,
> -	.clk_gate = true,
> -	.save_ctx = true,
>  };
>  
>  static struct lpss_device_desc byt_sdio_dev_desc = {
> -	.clk_required = true,
> +	.flags = LPSS_CLK,
>  };
>  
>  static struct lpss_shared_clock i2c_clock = {
> @@ -189,9 +169,8 @@ static struct lpss_shared_clock i2c_clock = {
>  };
>  
>  static struct lpss_device_desc byt_i2c_dev_desc = {
> -	.clk_required = true,
> +	.flags = LPSS_CLK | LPSS_SAVE_CTX,
>  	.prv_offset = 0x800,
> -	.save_ctx = true,
>  	.shared_clock = &i2c_clock,
>  	.setup = lpss_i2c_setup,
>  };
> @@ -202,8 +181,7 @@ static struct lpss_shared_clock bsw_pwm_clock = {
>  };
>  
>  static struct lpss_device_desc bsw_pwm_dev_desc = {
> -	.clk_required = true,
> -	.save_ctx = true,
> +	.flags = LPSS_CLK | LPSS_SAVE_CTX,
>  	.shared_clock = &bsw_pwm_clock,
>  };
>  
> @@ -251,7 +229,8 @@ static const struct acpi_device_id acpi_lpss_device_ids[] = {
>  	{ "INT3436", LPSS_ADDR(lpt_sdio_dev_desc) },
>  	{ "INT3437", },
>  
> -	{ "INT3438", LPSS_ADDR(wpt_dev_desc) },
> +	/* Wildcat Point LPSS devices */
> +	{ "INT3438", LPSS_ADDR(lpt_dev_desc) },
>  
>  	{ }
>  };
> @@ -314,13 +293,13 @@ static int register_device_clock(struct acpi_device *adev,
>  		parent = shared_clock->name;
>  	}
>  
> -	if (dev_desc->clk_gate) {
> +	if (dev_desc->flags & LPSS_CLK_GATE) {
>  		clk = clk_register_gate(NULL, devname, parent, 0,
>  					prv_base, 0, 0, NULL);
>  		parent = devname;
>  	}
>  
> -	if (dev_desc->clk_divider) {
> +	if (dev_desc->flags & LPSS_CLK_DIVIDER) {
>  		/* Prevent division by zero */
>  		if (!readl(prv_base))
>  			writel(LPSS_CLK_DIVIDER_DEF_MASK, prv_base);
> @@ -392,7 +371,7 @@ static int acpi_lpss_create_device(struct acpi_device *adev,
>  
>  	pdata->dev_desc = dev_desc;
>  
> -	if (dev_desc->clk_required) {
> +	if (dev_desc->flags & LPSS_CLK) {
>  		ret = register_device_clock(adev, pdata);
>  		if (ret) {
>  			/* Skip the device, but continue the namespace scan. */
> @@ -693,19 +672,19 @@ static int acpi_lpss_platform_notify(struct notifier_block *nb,
>  
>  	switch (action) {
>  	case BUS_NOTIFY_BOUND_DRIVER:
> -		if (pdata->dev_desc->save_ctx)
> +		if (pdata->dev_desc->flags & LPSS_SAVE_CTX)
>  			pdev->dev.pm_domain = &acpi_lpss_pm_domain;
>  		break;
>  	case BUS_NOTIFY_UNBOUND_DRIVER:
> -		if (pdata->dev_desc->save_ctx)
> +		if (pdata->dev_desc->flags & LPSS_SAVE_CTX)
>  			pdev->dev.pm_domain = NULL;
>  		break;
>  	case BUS_NOTIFY_ADD_DEVICE:
> -		if (pdata->dev_desc->ltr_required)
> +		if (pdata->dev_desc->flags & LPSS_LTR)
>  			return sysfs_create_group(&pdev->dev.kobj,
>  						  &lpss_attr_group);
>  	case BUS_NOTIFY_DEL_DEVICE:
> -		if (pdata->dev_desc->ltr_required)
> +		if (pdata->dev_desc->flags & LPSS_LTR)
>  			sysfs_remove_group(&pdev->dev.kobj, &lpss_attr_group);
>  	default:
>  		break;
> @@ -722,7 +701,7 @@ static void acpi_lpss_bind(struct device *dev)
>  {
>  	struct lpss_private_data *pdata = acpi_driver_data(ACPI_COMPANION(dev));
>  
> -	if (!pdata || !pdata->mmio_base || !pdata->dev_desc->ltr_required)
> +	if (!pdata || !pdata->mmio_base || !(pdata->dev_desc->flags & LPSS_LTR))
>  		return;
>  
>  	if (pdata->mmio_size >= pdata->dev_desc->prv_offset + LPSS_LTR_SIZE)


-- 
Andy Shevchenko <andriy.shevchenko@linux.intel.com>
Intel Finland Oy


^ permalink raw reply	[flat|nested] 12+ messages in thread

* Re: [PATCH 4/4] ACPI / LPSS: remove struct lpss_shared_clock
  2014-09-02  7:55 ` [PATCH 4/4] ACPI / LPSS: remove struct lpss_shared_clock Heikki Krogerus
@ 2014-09-02  8:47   ` Andy Shevchenko
  0 siblings, 0 replies; 12+ messages in thread
From: Andy Shevchenko @ 2014-09-02  8:47 UTC (permalink / raw)
  To: Heikki Krogerus; +Cc: Rafael J. Wysocki, Mika Westerberg, linux-acpi

On Tue, 2014-09-02 at 10:55 +0300, Heikki Krogerus wrote:
> Nothing requires it anymore. The PWM driver no longer
> uses clk framework to get the rate.
> 
> Signed-off-by: Heikki Krogerus <heikki.krogerus@linux.intel.com>

Reviewed-by: Andy Shevchenko <andriy.shevchenko@linux.intel.com>

> ---
>  drivers/acpi/acpi_lpss.c | 39 ++-------------------------------------
>  1 file changed, 2 insertions(+), 37 deletions(-)
> 
> diff --git a/drivers/acpi/acpi_lpss.c b/drivers/acpi/acpi_lpss.c
> index b693098..bcbdbd2 100644
> --- a/drivers/acpi/acpi_lpss.c
> +++ b/drivers/acpi/acpi_lpss.c
> @@ -61,19 +61,12 @@ ACPI_MODULE_NAME("acpi_lpss");
>  #define LPSS_LTR			BIT(3)
>  #define LPSS_SAVE_CTX			BIT(4)
>  
> -struct lpss_shared_clock {
> -	const char *name;
> -	unsigned long rate;
> -	struct clk *clk;
> -};
> -
>  struct lpss_private_data;
>  
>  struct lpss_device_desc {
>  	unsigned int flags;
>  	unsigned int prv_offset;
>  	size_t prv_size_override;
> -	struct lpss_shared_clock *shared_clock;
>  	void (*setup)(struct lpss_private_data *pdata);
>  };
>  
> @@ -140,14 +133,8 @@ static struct lpss_device_desc lpt_sdio_dev_desc = {
>  	.prv_size_override = 0x1018,
>  };
>  
> -static struct lpss_shared_clock pwm_clock = {
> -	.name = "pwm_clk",
> -	.rate = 25000000,
> -};
> -
>  static struct lpss_device_desc byt_pwm_dev_desc = {
> -	.flags = LPSS_CLK | LPSS_SAVE_CTX,
> -	.shared_clock = &pwm_clock,
> +	.flags = LPSS_SAVE_CTX,
>  };
>  
>  static struct lpss_device_desc byt_uart_dev_desc = {
> @@ -171,16 +158,6 @@ static struct lpss_device_desc byt_i2c_dev_desc = {
>  	.setup = byt_i2c_setup,
>  };
>  
> -static struct lpss_shared_clock bsw_pwm_clock = {
> -	.name = "pwm_clk",
> -	.rate = 19200000,
> -};
> -
> -static struct lpss_device_desc bsw_pwm_dev_desc = {
> -	.flags = LPSS_CLK | LPSS_SAVE_CTX,
> -	.shared_clock = &bsw_pwm_clock,
> -};
> -
>  #else
>  
>  #define LPSS_ADDR(desc) (0UL)
> @@ -211,7 +188,7 @@ static const struct acpi_device_id acpi_lpss_device_ids[] = {
>  	{ "INT33FC", },
>  
>  	/* Braswell LPSS devices */
> -	{ "80862288", LPSS_ADDR(bsw_pwm_dev_desc) },
> +	{ "80862288", LPSS_ADDR(byt_pwm_dev_desc) },
>  	{ "8086228A", LPSS_ADDR(byt_uart_dev_desc) },
>  	{ "8086228E", LPSS_ADDR(byt_spi_dev_desc) },
>  	{ "808622C1", LPSS_ADDR(byt_i2c_dev_desc) },
> @@ -251,7 +228,6 @@ static int register_device_clock(struct acpi_device *adev,
>  				 struct lpss_private_data *pdata)
>  {
>  	const struct lpss_device_desc *dev_desc = pdata->dev_desc;
> -	struct lpss_shared_clock *shared_clock = dev_desc->shared_clock;
>  	const char *devname = dev_name(&adev->dev);
>  	struct clk *clk = ERR_PTR(-ENODEV);
>  	struct lpss_clk_data *clk_data;
> @@ -273,17 +249,6 @@ static int register_device_clock(struct acpi_device *adev,
>  	parent = clk_data->name;
>  	prv_base = pdata->mmio_base + dev_desc->prv_offset;
>  
> -	if (shared_clock) {
> -		clk = shared_clock->clk;
> -		if (!clk) {
> -			clk = clk_register_fixed_rate(NULL, shared_clock->name,
> -						      "lpss_clk", 0,
> -						      shared_clock->rate);
> -			shared_clock->clk = clk;
> -		}
> -		parent = shared_clock->name;
> -	}
> -
>  	if (pdata->fixed_clk_rate) {
>  		clk = clk_register_fixed_rate(NULL, devname, parent, 0,
>  					      pdata->fixed_clk_rate);


-- 
Andy Shevchenko <andriy.shevchenko@intel.com>
Intel Finland Oy


^ permalink raw reply	[flat|nested] 12+ messages in thread

* Re: [PATCH 2/4] ACPI / LPSS: drop clkdev_name member from lpss_device_desc
  2014-09-02  8:43   ` Andy Shevchenko
@ 2014-09-02 10:34     ` Heikki Krogerus
  2014-09-02 10:42       ` Andy Shevchenko
  0 siblings, 1 reply; 12+ messages in thread
From: Heikki Krogerus @ 2014-09-02 10:34 UTC (permalink / raw)
  To: Andy Shevchenko; +Cc: Rafael J. Wysocki, Mika Westerberg, linux-acpi

On Tue, Sep 02, 2014 at 11:43:16AM +0300, Andy Shevchenko wrote:
> On Tue, 2014-09-02 at 10:55 +0300, Heikki Krogerus wrote:
> > It was used to provide the correct con_id for the dma
> > driver, but it's not needed. Even if the driver requests a
> > clock with the con_id, it still gets the correct clock. The
> 
> Maybe with -> without?

No. What I'm trying say is that even though the dma engine driver
requests the clock like this:

        dw->clk = devm_clk_get(chip->dev, "hclk")

i.e. _with_ the con_id "hclk", it will still get the correct
reference because..

> > device name is enough to match a single clock.


Cheers,

-- 
heikki

^ permalink raw reply	[flat|nested] 12+ messages in thread

* Re: [PATCH 2/4] ACPI / LPSS: drop clkdev_name member from lpss_device_desc
  2014-09-02 10:34     ` Heikki Krogerus
@ 2014-09-02 10:42       ` Andy Shevchenko
  0 siblings, 0 replies; 12+ messages in thread
From: Andy Shevchenko @ 2014-09-02 10:42 UTC (permalink / raw)
  To: Heikki Krogerus; +Cc: Rafael J. Wysocki, Mika Westerberg, linux-acpi

On Tue, 2014-09-02 at 13:34 +0300, Heikki Krogerus wrote:
> On Tue, Sep 02, 2014 at 11:43:16AM +0300, Andy Shevchenko wrote:
> > On Tue, 2014-09-02 at 10:55 +0300, Heikki Krogerus wrote:
> > > It was used to provide the correct con_id for the dma
> > > driver, but it's not needed. Even if the driver requests a
> > > clock with the con_id, it still gets the correct clock. The
> > 
> > Maybe with -> without?
> 
> No. What I'm trying say is that even though the dma engine driver
> requests the clock like this:
> 
>         dw->clk = devm_clk_get(chip->dev, "hclk")
> 
> i.e. _with_ the con_id "hclk", it will still get the correct
> reference because..
> > > device name is enough to match a single clock.

Fair enough.


-- 
Andy Shevchenko <andriy.shevchenko@intel.com>
Intel Finland Oy


^ permalink raw reply	[flat|nested] 12+ messages in thread

* Re: [PATCH 0/4] ACPI / LPSS: clock improvements
  2014-09-02  7:55 [PATCH 0/4] ACPI / LPSS: clock improvements Heikki Krogerus
                   ` (3 preceding siblings ...)
  2014-09-02  7:55 ` [PATCH 4/4] ACPI / LPSS: remove struct lpss_shared_clock Heikki Krogerus
@ 2014-09-02 10:46 ` Mika Westerberg
  2014-09-03 21:49 ` Rafael J. Wysocki
  5 siblings, 0 replies; 12+ messages in thread
From: Mika Westerberg @ 2014-09-02 10:46 UTC (permalink / raw)
  To: Heikki Krogerus; +Cc: Rafael J. Wysocki, Andy Shevchenko, linux-acpi

On Tue, Sep 02, 2014 at 10:55:06AM +0300, Heikki Krogerus wrote:
> Minor improvements mainly related to how the clocks are handled.
> 
> 
> Heikki Krogerus (4):
>   ACPI / LPSS: introduce flags
>   ACPI / LPSS: drop clkdev_name member from lpss_device_desc
>   ACPI / LPSS: support for 133MHz I2C source clock on Baytrail
>   ACPI / LPSS: remove struct lpss_shared_clock
> 

Nice cleanup!

Acked-by: Mika Westerberg <mika.westerberg@linux.intel.com>

for the whole series.

^ permalink raw reply	[flat|nested] 12+ messages in thread

* Re: [PATCH 0/4] ACPI / LPSS: clock improvements
  2014-09-02  7:55 [PATCH 0/4] ACPI / LPSS: clock improvements Heikki Krogerus
                   ` (4 preceding siblings ...)
  2014-09-02 10:46 ` [PATCH 0/4] ACPI / LPSS: clock improvements Mika Westerberg
@ 2014-09-03 21:49 ` Rafael J. Wysocki
  5 siblings, 0 replies; 12+ messages in thread
From: Rafael J. Wysocki @ 2014-09-03 21:49 UTC (permalink / raw)
  To: Heikki Krogerus; +Cc: Andy Shevchenko, Mika Westerberg, linux-acpi

On Tuesday, September 02, 2014 10:55:06 AM Heikki Krogerus wrote:
> Minor improvements mainly related to how the clocks are handled.
> 
> 
> Heikki Krogerus (4):
>   ACPI / LPSS: introduce flags
>   ACPI / LPSS: drop clkdev_name member from lpss_device_desc
>   ACPI / LPSS: support for 133MHz I2C source clock on Baytrail
>   ACPI / LPSS: remove struct lpss_shared_clock
> 
>  drivers/acpi/acpi_lpss.c | 145 ++++++++++++++---------------------------------
>  1 file changed, 43 insertions(+), 102 deletions(-)

Series queued up for 3.18, thanks!

-- 
I speak only for myself.
Rafael J. Wysocki, Intel Open Source Technology Center.

^ permalink raw reply	[flat|nested] 12+ messages in thread

end of thread, other threads:[~2014-09-03 21:30 UTC | newest]

Thread overview: 12+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2014-09-02  7:55 [PATCH 0/4] ACPI / LPSS: clock improvements Heikki Krogerus
2014-09-02  7:55 ` [PATCH 1/4] ACPI / LPSS: introduce flags Heikki Krogerus
2014-09-02  8:45   ` Andy Shevchenko
2014-09-02  7:55 ` [PATCH 2/4] ACPI / LPSS: drop clkdev_name member from lpss_device_desc Heikki Krogerus
2014-09-02  8:43   ` Andy Shevchenko
2014-09-02 10:34     ` Heikki Krogerus
2014-09-02 10:42       ` Andy Shevchenko
2014-09-02  7:55 ` [PATCH 3/4] ACPI / LPSS: support for 133MHz I2C source clock on Baytrail Heikki Krogerus
2014-09-02  7:55 ` [PATCH 4/4] ACPI / LPSS: remove struct lpss_shared_clock Heikki Krogerus
2014-09-02  8:47   ` Andy Shevchenko
2014-09-02 10:46 ` [PATCH 0/4] ACPI / LPSS: clock improvements Mika Westerberg
2014-09-03 21:49 ` Rafael J. Wysocki

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox