* [PATCH v4 0/7] pwm: lpss: Clean up and convert to a pure library
@ 2022-09-27 16:24 Andy Shevchenko
2022-09-27 16:24 ` [PATCH v4 1/7] pwm: lpss: Deduplicate board info data structures Andy Shevchenko
` (7 more replies)
0 siblings, 8 replies; 13+ messages in thread
From: Andy Shevchenko @ 2022-09-27 16:24 UTC (permalink / raw)
To: Hans de Goede, Uwe Kleine-König, Andy Shevchenko, linux-pwm,
linux-kernel
Cc: Thierry Reding
First of all, a set of cleanups and code deduplications (for better
maintenance) to the PWM LPSS driver.
Second, we may (re-)use the core part as a library in the future in
the devices that combine the same PWM IP in their address space. So
convert the core file to be a pure library which doesn't require any
special resource handling or alike.
Changelog v4:
- dropped the forward declaration use patch, seems too many questions to it
Changelog v3:
- postponed last patch until we have a new user
- added tags (Uwe, Hans)
- expanded commit message on why forward declarations are preferred over
full header inclusions
Changelog v2:
- replace patch 1 by Uwe's version (Uwe)
- update NS patch to have a default namespace defined (Uwe)
- describe all changes done in patch 4 (Uwe)
Andy Shevchenko (6):
pwm: lpss: Move exported symbols to PWM_LPSS namespace
pwm: lpss: Move resource mapping to the glue drivers
pwm: lpss: Use device_get_match_data to get device data
pwm: lpss: Use DEFINE_RUNTIME_DEV_PM_OPS() and pm_ptr() macros
pwm: lpss: Make use of bits.h macros for all masks
pwm: lpss: Add a comment to the bypass field
Uwe Kleine-König (1):
pwm: lpss: Deduplicate board info data structures
drivers/pwm/pwm-lpss-pci.c | 48 ++++++++-------------------------
drivers/pwm/pwm-lpss-platform.c | 40 +++++++--------------------
drivers/pwm/pwm-lpss.c | 46 ++++++++++++++++++++++++++-----
drivers/pwm/pwm-lpss.h | 12 ++++++++-
4 files changed, 72 insertions(+), 74 deletions(-)
--
2.35.1
^ permalink raw reply [flat|nested] 13+ messages in thread
* [PATCH v4 1/7] pwm: lpss: Deduplicate board info data structures
2022-09-27 16:24 [PATCH v4 0/7] pwm: lpss: Clean up and convert to a pure library Andy Shevchenko
@ 2022-09-27 16:24 ` Andy Shevchenko
2022-09-27 16:24 ` [PATCH v4 2/7] pwm: lpss: Move exported symbols to PWM_LPSS namespace Andy Shevchenko
` (6 subsequent siblings)
7 siblings, 0 replies; 13+ messages in thread
From: Andy Shevchenko @ 2022-09-27 16:24 UTC (permalink / raw)
To: Hans de Goede, Uwe Kleine-König, Andy Shevchenko, linux-pwm,
linux-kernel
Cc: Thierry Reding
From: Uwe Kleine-König <u.kleine-koenig@pengutronix.de>
Move the board info structures from the glue drivers to the
common library and hence deduplicate configuration data.
For the Intel Braswell case the ACPI version should be used.
Because switch to ACPI/PCI is done in BIOS while quite likely
the rest of AML code is the same, meaning similar issue might
be observed. There is no bug report due to no PCI enabled device
in the wild, Andy thinks, and only reference boards can be tested,
so nobody really cares about Intel Braswell PCI case.
Signed-off-by: Uwe Kleine-König <u.kleine-koenig@pengutronix.de>
Signed-off-by: Andy Shevchenko <andriy.shevchenko@linux.intel.com>
Reviewed-by: Hans de Goede <hdegoede@redhat.com>
---
drivers/pwm/pwm-lpss-pci.c | 29 ----------------------------
drivers/pwm/pwm-lpss-platform.c | 22 ---------------------
drivers/pwm/pwm-lpss.c | 34 +++++++++++++++++++++++++++++++++
drivers/pwm/pwm-lpss.h | 5 +++++
4 files changed, 39 insertions(+), 51 deletions(-)
diff --git a/drivers/pwm/pwm-lpss-pci.c b/drivers/pwm/pwm-lpss-pci.c
index c893ec3d2fb4..75b778e839b3 100644
--- a/drivers/pwm/pwm-lpss-pci.c
+++ b/drivers/pwm/pwm-lpss-pci.c
@@ -14,35 +14,6 @@
#include "pwm-lpss.h"
-/* BayTrail */
-static const struct pwm_lpss_boardinfo pwm_lpss_byt_info = {
- .clk_rate = 25000000,
- .npwm = 1,
- .base_unit_bits = 16,
-};
-
-/* Braswell */
-static const struct pwm_lpss_boardinfo pwm_lpss_bsw_info = {
- .clk_rate = 19200000,
- .npwm = 1,
- .base_unit_bits = 16,
-};
-
-/* Broxton */
-static const struct pwm_lpss_boardinfo pwm_lpss_bxt_info = {
- .clk_rate = 19200000,
- .npwm = 4,
- .base_unit_bits = 22,
- .bypass = true,
-};
-
-/* Tangier */
-static const struct pwm_lpss_boardinfo pwm_lpss_tng_info = {
- .clk_rate = 19200000,
- .npwm = 4,
- .base_unit_bits = 22,
-};
-
static int pwm_lpss_probe_pci(struct pci_dev *pdev,
const struct pci_device_id *id)
{
diff --git a/drivers/pwm/pwm-lpss-platform.c b/drivers/pwm/pwm-lpss-platform.c
index 928570430cef..834423c34f48 100644
--- a/drivers/pwm/pwm-lpss-platform.c
+++ b/drivers/pwm/pwm-lpss-platform.c
@@ -15,28 +15,6 @@
#include "pwm-lpss.h"
-/* BayTrail */
-static const struct pwm_lpss_boardinfo pwm_lpss_byt_info = {
- .clk_rate = 25000000,
- .npwm = 1,
- .base_unit_bits = 16,
-};
-
-/* Braswell */
-static const struct pwm_lpss_boardinfo pwm_lpss_bsw_info = {
- .clk_rate = 19200000,
- .npwm = 1,
- .base_unit_bits = 16,
- .other_devices_aml_touches_pwm_regs = true,
-};
-
-/* Broxton */
-static const struct pwm_lpss_boardinfo pwm_lpss_bxt_info = {
- .clk_rate = 19200000,
- .npwm = 4,
- .base_unit_bits = 22,
- .bypass = true,
-};
static int pwm_lpss_probe_platform(struct platform_device *pdev)
{
diff --git a/drivers/pwm/pwm-lpss.c b/drivers/pwm/pwm-lpss.c
index 36d4e83e6b79..9537aefd254a 100644
--- a/drivers/pwm/pwm-lpss.c
+++ b/drivers/pwm/pwm-lpss.c
@@ -29,6 +29,40 @@
/* Size of each PWM register space if multiple */
#define PWM_SIZE 0x400
+/* BayTrail */
+const struct pwm_lpss_boardinfo pwm_lpss_byt_info = {
+ .clk_rate = 25000000,
+ .npwm = 1,
+ .base_unit_bits = 16,
+};
+EXPORT_SYMBOL_GPL(pwm_lpss_byt_info);
+
+/* Braswell */
+const struct pwm_lpss_boardinfo pwm_lpss_bsw_info = {
+ .clk_rate = 19200000,
+ .npwm = 1,
+ .base_unit_bits = 16,
+ .other_devices_aml_touches_pwm_regs = true,
+};
+EXPORT_SYMBOL_GPL(pwm_lpss_bsw_info);
+
+/* Broxton */
+const struct pwm_lpss_boardinfo pwm_lpss_bxt_info = {
+ .clk_rate = 19200000,
+ .npwm = 4,
+ .base_unit_bits = 22,
+ .bypass = true,
+};
+EXPORT_SYMBOL_GPL(pwm_lpss_bxt_info);
+
+/* Tangier */
+const struct pwm_lpss_boardinfo pwm_lpss_tng_info = {
+ .clk_rate = 19200000,
+ .npwm = 4,
+ .base_unit_bits = 22,
+};
+EXPORT_SYMBOL_GPL(pwm_lpss_tng_info);
+
static inline struct pwm_lpss_chip *to_lpwm(struct pwm_chip *chip)
{
return container_of(chip, struct pwm_lpss_chip, chip);
diff --git a/drivers/pwm/pwm-lpss.h b/drivers/pwm/pwm-lpss.h
index 8b3476f25e06..9ea5b145a353 100644
--- a/drivers/pwm/pwm-lpss.h
+++ b/drivers/pwm/pwm-lpss.h
@@ -33,6 +33,11 @@ struct pwm_lpss_boardinfo {
bool other_devices_aml_touches_pwm_regs;
};
+extern const struct pwm_lpss_boardinfo pwm_lpss_byt_info;
+extern const struct pwm_lpss_boardinfo pwm_lpss_bsw_info;
+extern const struct pwm_lpss_boardinfo pwm_lpss_bxt_info;
+extern const struct pwm_lpss_boardinfo pwm_lpss_tng_info;
+
struct pwm_lpss_chip *pwm_lpss_probe(struct device *dev, struct resource *r,
const struct pwm_lpss_boardinfo *info);
--
2.35.1
^ permalink raw reply related [flat|nested] 13+ messages in thread
* [PATCH v4 2/7] pwm: lpss: Move exported symbols to PWM_LPSS namespace
2022-09-27 16:24 [PATCH v4 0/7] pwm: lpss: Clean up and convert to a pure library Andy Shevchenko
2022-09-27 16:24 ` [PATCH v4 1/7] pwm: lpss: Deduplicate board info data structures Andy Shevchenko
@ 2022-09-27 16:24 ` Andy Shevchenko
2022-09-27 16:24 ` [PATCH v4 3/7] pwm: lpss: Move resource mapping to the glue drivers Andy Shevchenko
` (5 subsequent siblings)
7 siblings, 0 replies; 13+ messages in thread
From: Andy Shevchenko @ 2022-09-27 16:24 UTC (permalink / raw)
To: Hans de Goede, Uwe Kleine-König, Andy Shevchenko, linux-pwm,
linux-kernel
Cc: Thierry Reding
Avoid unnecessary pollution of the global symbol namespace by
moving library functions in to a specific namespace and import
that into the drivers that make use of the functions.
For more info: https://lwn.net/Articles/760045/
Suggested-by: Uwe Kleine-König <u.kleine-koenig@pengutronix.de>
Signed-off-by: Andy Shevchenko <andriy.shevchenko@linux.intel.com>
Reviewed-by: Hans de Goede <hdegoede@redhat.com>
Acked-by: Uwe Kleine-König <u.kleine-koenig@pengutronix.de>
---
drivers/pwm/pwm-lpss-pci.c | 1 +
drivers/pwm/pwm-lpss-platform.c | 1 +
drivers/pwm/pwm-lpss.c | 2 ++
3 files changed, 4 insertions(+)
diff --git a/drivers/pwm/pwm-lpss-pci.c b/drivers/pwm/pwm-lpss-pci.c
index 75b778e839b3..9f2c666b95ec 100644
--- a/drivers/pwm/pwm-lpss-pci.c
+++ b/drivers/pwm/pwm-lpss-pci.c
@@ -92,3 +92,4 @@ module_pci_driver(pwm_lpss_driver_pci);
MODULE_DESCRIPTION("PWM PCI driver for Intel LPSS");
MODULE_LICENSE("GPL v2");
+MODULE_IMPORT_NS(PWM_LPSS);
diff --git a/drivers/pwm/pwm-lpss-platform.c b/drivers/pwm/pwm-lpss-platform.c
index 834423c34f48..65154c0abab1 100644
--- a/drivers/pwm/pwm-lpss-platform.c
+++ b/drivers/pwm/pwm-lpss-platform.c
@@ -88,4 +88,5 @@ module_platform_driver(pwm_lpss_driver_platform);
MODULE_DESCRIPTION("PWM platform driver for Intel LPSS");
MODULE_LICENSE("GPL v2");
+MODULE_IMPORT_NS(PWM_LPSS);
MODULE_ALIAS("platform:pwm-lpss");
diff --git a/drivers/pwm/pwm-lpss.c b/drivers/pwm/pwm-lpss.c
index 9537aefd254a..74a296cb1af0 100644
--- a/drivers/pwm/pwm-lpss.c
+++ b/drivers/pwm/pwm-lpss.c
@@ -18,6 +18,8 @@
#include <linux/pm_runtime.h>
#include <linux/time.h>
+#define DEFAULT_SYMBOL_NAMESPACE PWM_LPSS
+
#include "pwm-lpss.h"
#define PWM 0x00000000
--
2.35.1
^ permalink raw reply related [flat|nested] 13+ messages in thread
* [PATCH v4 3/7] pwm: lpss: Move resource mapping to the glue drivers
2022-09-27 16:24 [PATCH v4 0/7] pwm: lpss: Clean up and convert to a pure library Andy Shevchenko
2022-09-27 16:24 ` [PATCH v4 1/7] pwm: lpss: Deduplicate board info data structures Andy Shevchenko
2022-09-27 16:24 ` [PATCH v4 2/7] pwm: lpss: Move exported symbols to PWM_LPSS namespace Andy Shevchenko
@ 2022-09-27 16:24 ` Andy Shevchenko
2022-09-27 16:24 ` [PATCH v4 4/7] pwm: lpss: Use device_get_match_data to get device data Andy Shevchenko
` (4 subsequent siblings)
7 siblings, 0 replies; 13+ messages in thread
From: Andy Shevchenko @ 2022-09-27 16:24 UTC (permalink / raw)
To: Hans de Goede, Uwe Kleine-König, Andy Shevchenko, linux-pwm,
linux-kernel
Cc: Thierry Reding
Move resource mapping to the glue drivers which helps
to transform pwm_lpss_probe() to pure library function
that may be used by others without need of specific
resource management.
Signed-off-by: Andy Shevchenko <andriy.shevchenko@linux.intel.com>
Reviewed-by: Hans de Goede <hdegoede@redhat.com>
Acked-by: Uwe Kleine-König <u.kleine-koenig@pengutronix.de>
---
drivers/pwm/pwm-lpss-pci.c | 6 +++++-
drivers/pwm/pwm-lpss-platform.c | 9 ++++++---
drivers/pwm/pwm-lpss.c | 7 ++-----
drivers/pwm/pwm-lpss.h | 2 +-
4 files changed, 14 insertions(+), 10 deletions(-)
diff --git a/drivers/pwm/pwm-lpss-pci.c b/drivers/pwm/pwm-lpss-pci.c
index 9f2c666b95ec..f3367e844e61 100644
--- a/drivers/pwm/pwm-lpss-pci.c
+++ b/drivers/pwm/pwm-lpss-pci.c
@@ -25,8 +25,12 @@ static int pwm_lpss_probe_pci(struct pci_dev *pdev,
if (err < 0)
return err;
+ err = pcim_iomap_regions(pdev, BIT(0), pci_name(pdev));
+ if (err)
+ return err;
+
info = (struct pwm_lpss_boardinfo *)id->driver_data;
- lpwm = pwm_lpss_probe(&pdev->dev, &pdev->resource[0], info);
+ lpwm = pwm_lpss_probe(&pdev->dev, pcim_iomap_table(pdev)[0], info);
if (IS_ERR(lpwm))
return PTR_ERR(lpwm);
diff --git a/drivers/pwm/pwm-lpss-platform.c b/drivers/pwm/pwm-lpss-platform.c
index 65154c0abab1..7bbbb7a9b578 100644
--- a/drivers/pwm/pwm-lpss-platform.c
+++ b/drivers/pwm/pwm-lpss-platform.c
@@ -21,16 +21,19 @@ static int pwm_lpss_probe_platform(struct platform_device *pdev)
const struct pwm_lpss_boardinfo *info;
const struct acpi_device_id *id;
struct pwm_lpss_chip *lpwm;
- struct resource *r;
+ void __iomem *base;
id = acpi_match_device(pdev->dev.driver->acpi_match_table, &pdev->dev);
if (!id)
return -ENODEV;
info = (const struct pwm_lpss_boardinfo *)id->driver_data;
- r = platform_get_resource(pdev, IORESOURCE_MEM, 0);
- lpwm = pwm_lpss_probe(&pdev->dev, r, info);
+ base = devm_platform_ioremap_resource(pdev, 0);
+ if (IS_ERR(base))
+ return PTR_ERR(base);
+
+ lpwm = pwm_lpss_probe(&pdev->dev, base, info);
if (IS_ERR(lpwm))
return PTR_ERR(lpwm);
diff --git a/drivers/pwm/pwm-lpss.c b/drivers/pwm/pwm-lpss.c
index 74a296cb1af0..a20915459809 100644
--- a/drivers/pwm/pwm-lpss.c
+++ b/drivers/pwm/pwm-lpss.c
@@ -243,7 +243,7 @@ static const struct pwm_ops pwm_lpss_ops = {
.owner = THIS_MODULE,
};
-struct pwm_lpss_chip *pwm_lpss_probe(struct device *dev, struct resource *r,
+struct pwm_lpss_chip *pwm_lpss_probe(struct device *dev, void __iomem *base,
const struct pwm_lpss_boardinfo *info)
{
struct pwm_lpss_chip *lpwm;
@@ -258,10 +258,7 @@ struct pwm_lpss_chip *pwm_lpss_probe(struct device *dev, struct resource *r,
if (!lpwm)
return ERR_PTR(-ENOMEM);
- lpwm->regs = devm_ioremap_resource(dev, r);
- if (IS_ERR(lpwm->regs))
- return ERR_CAST(lpwm->regs);
-
+ lpwm->regs = base;
lpwm->info = info;
c = lpwm->info->clk_rate;
diff --git a/drivers/pwm/pwm-lpss.h b/drivers/pwm/pwm-lpss.h
index 9ea5b145a353..c344921b2cab 100644
--- a/drivers/pwm/pwm-lpss.h
+++ b/drivers/pwm/pwm-lpss.h
@@ -38,7 +38,7 @@ extern const struct pwm_lpss_boardinfo pwm_lpss_bsw_info;
extern const struct pwm_lpss_boardinfo pwm_lpss_bxt_info;
extern const struct pwm_lpss_boardinfo pwm_lpss_tng_info;
-struct pwm_lpss_chip *pwm_lpss_probe(struct device *dev, struct resource *r,
+struct pwm_lpss_chip *pwm_lpss_probe(struct device *dev, void __iomem *base,
const struct pwm_lpss_boardinfo *info);
#endif /* __PWM_LPSS_H */
--
2.35.1
^ permalink raw reply related [flat|nested] 13+ messages in thread
* [PATCH v4 4/7] pwm: lpss: Use device_get_match_data to get device data
2022-09-27 16:24 [PATCH v4 0/7] pwm: lpss: Clean up and convert to a pure library Andy Shevchenko
` (2 preceding siblings ...)
2022-09-27 16:24 ` [PATCH v4 3/7] pwm: lpss: Move resource mapping to the glue drivers Andy Shevchenko
@ 2022-09-27 16:24 ` Andy Shevchenko
2022-09-27 16:24 ` [PATCH v4 5/7] pwm: lpss: Use DEFINE_RUNTIME_DEV_PM_OPS() and pm_ptr() macros Andy Shevchenko
` (3 subsequent siblings)
7 siblings, 0 replies; 13+ messages in thread
From: Andy Shevchenko @ 2022-09-27 16:24 UTC (permalink / raw)
To: Hans de Goede, Uwe Kleine-König, Andy Shevchenko, linux-pwm,
linux-kernel
Cc: Thierry Reding
device_get_match_data() in ACPI case calls similar to the
acpi_match_device(). We may simplify the code and make it
generic by replacing the latter with the former.
Signed-off-by: Andy Shevchenko <andriy.shevchenko@linux.intel.com>
Reviewed-by: Hans de Goede <hdegoede@redhat.com>
Acked-by: Uwe Kleine-König <u.kleine-koenig@pengutronix.de>
---
drivers/pwm/pwm-lpss-platform.c | 10 ++++------
1 file changed, 4 insertions(+), 6 deletions(-)
diff --git a/drivers/pwm/pwm-lpss-platform.c b/drivers/pwm/pwm-lpss-platform.c
index 7bbbb7a9b578..c48c6f2b2cd8 100644
--- a/drivers/pwm/pwm-lpss-platform.c
+++ b/drivers/pwm/pwm-lpss-platform.c
@@ -7,11 +7,12 @@
* Derived from the original pwm-lpss.c
*/
-#include <linux/acpi.h>
#include <linux/kernel.h>
+#include <linux/mod_devicetable.h>
#include <linux/module.h>
#include <linux/platform_device.h>
#include <linux/pm_runtime.h>
+#include <linux/property.h>
#include "pwm-lpss.h"
@@ -19,16 +20,13 @@
static int pwm_lpss_probe_platform(struct platform_device *pdev)
{
const struct pwm_lpss_boardinfo *info;
- const struct acpi_device_id *id;
struct pwm_lpss_chip *lpwm;
void __iomem *base;
- id = acpi_match_device(pdev->dev.driver->acpi_match_table, &pdev->dev);
- if (!id)
+ info = device_get_match_data(&pdev->dev);
+ if (!info)
return -ENODEV;
- info = (const struct pwm_lpss_boardinfo *)id->driver_data;
-
base = devm_platform_ioremap_resource(pdev, 0);
if (IS_ERR(base))
return PTR_ERR(base);
--
2.35.1
^ permalink raw reply related [flat|nested] 13+ messages in thread
* [PATCH v4 5/7] pwm: lpss: Use DEFINE_RUNTIME_DEV_PM_OPS() and pm_ptr() macros
2022-09-27 16:24 [PATCH v4 0/7] pwm: lpss: Clean up and convert to a pure library Andy Shevchenko
` (3 preceding siblings ...)
2022-09-27 16:24 ` [PATCH v4 4/7] pwm: lpss: Use device_get_match_data to get device data Andy Shevchenko
@ 2022-09-27 16:24 ` Andy Shevchenko
2022-09-27 16:24 ` [PATCH v4 6/7] pwm: lpss: Make use of bits.h macros for all masks Andy Shevchenko
` (2 subsequent siblings)
7 siblings, 0 replies; 13+ messages in thread
From: Andy Shevchenko @ 2022-09-27 16:24 UTC (permalink / raw)
To: Hans de Goede, Uwe Kleine-König, Andy Shevchenko, linux-pwm,
linux-kernel
Cc: Thierry Reding
Using these new macros allows the compiler to remove the unused dev_pm_ops
structure and related functions if !CONFIG_PM without the need to mark
the functions __maybe_unused.
Signed-off-by: Andy Shevchenko <andriy.shevchenko@linux.intel.com>
Reviewed-by: Hans de Goede <hdegoede@redhat.com>
Acked-by: Uwe Kleine-König <u.kleine-koenig@pengutronix.de>
---
drivers/pwm/pwm-lpss-pci.c | 12 +++++-------
1 file changed, 5 insertions(+), 7 deletions(-)
diff --git a/drivers/pwm/pwm-lpss-pci.c b/drivers/pwm/pwm-lpss-pci.c
index f3367e844e61..98413d364338 100644
--- a/drivers/pwm/pwm-lpss-pci.c
+++ b/drivers/pwm/pwm-lpss-pci.c
@@ -48,7 +48,6 @@ static void pwm_lpss_remove_pci(struct pci_dev *pdev)
pm_runtime_get_sync(&pdev->dev);
}
-#ifdef CONFIG_PM
static int pwm_lpss_runtime_suspend_pci(struct device *dev)
{
/*
@@ -62,12 +61,11 @@ static int pwm_lpss_runtime_resume_pci(struct device *dev)
{
return 0;
}
-#endif
-static const struct dev_pm_ops pwm_lpss_pci_pm = {
- SET_RUNTIME_PM_OPS(pwm_lpss_runtime_suspend_pci,
- pwm_lpss_runtime_resume_pci, NULL)
-};
+static DEFINE_RUNTIME_DEV_PM_OPS(pwm_lpss_pci_pm,
+ pwm_lpss_runtime_suspend_pci,
+ pwm_lpss_runtime_resume_pci,
+ NULL);
static const struct pci_device_id pwm_lpss_pci_ids[] = {
{ PCI_VDEVICE(INTEL, 0x0ac8), (unsigned long)&pwm_lpss_bxt_info},
@@ -89,7 +87,7 @@ static struct pci_driver pwm_lpss_driver_pci = {
.probe = pwm_lpss_probe_pci,
.remove = pwm_lpss_remove_pci,
.driver = {
- .pm = &pwm_lpss_pci_pm,
+ .pm = pm_ptr(&pwm_lpss_pci_pm),
},
};
module_pci_driver(pwm_lpss_driver_pci);
--
2.35.1
^ permalink raw reply related [flat|nested] 13+ messages in thread
* [PATCH v4 6/7] pwm: lpss: Make use of bits.h macros for all masks
2022-09-27 16:24 [PATCH v4 0/7] pwm: lpss: Clean up and convert to a pure library Andy Shevchenko
` (4 preceding siblings ...)
2022-09-27 16:24 ` [PATCH v4 5/7] pwm: lpss: Use DEFINE_RUNTIME_DEV_PM_OPS() and pm_ptr() macros Andy Shevchenko
@ 2022-09-27 16:24 ` Andy Shevchenko
2022-09-28 14:20 ` Thierry Reding
2022-09-27 16:24 ` [PATCH v4 7/7] pwm: lpss: Add a comment to the bypass field Andy Shevchenko
2022-09-28 14:22 ` [PATCH v4 0/7] pwm: lpss: Clean up and convert to a pure library Thierry Reding
7 siblings, 1 reply; 13+ messages in thread
From: Andy Shevchenko @ 2022-09-27 16:24 UTC (permalink / raw)
To: Hans de Goede, Uwe Kleine-König, Andy Shevchenko, linux-pwm,
linux-kernel
Cc: Thierry Reding
Make use of the GENMASK() (far less error-prone, far more concise).
Signed-off-by: Andy Shevchenko <andriy.shevchenko@linux.intel.com>
Reviewed-by: Hans de Goede <hdegoede@redhat.com>
Acked-by: Uwe Kleine-König <u.kleine-koenig@pengutronix.de>
---
drivers/pwm/pwm-lpss.c | 3 ++-
1 file changed, 2 insertions(+), 1 deletion(-)
diff --git a/drivers/pwm/pwm-lpss.c b/drivers/pwm/pwm-lpss.c
index a20915459809..accdef5dd58e 100644
--- a/drivers/pwm/pwm-lpss.c
+++ b/drivers/pwm/pwm-lpss.c
@@ -10,6 +10,7 @@
* Author: Alan Cox <alan@linux.intel.com>
*/
+#include <linux/bits.h>
#include <linux/delay.h>
#include <linux/io.h>
#include <linux/iopoll.h>
@@ -26,7 +27,7 @@
#define PWM_ENABLE BIT(31)
#define PWM_SW_UPDATE BIT(30)
#define PWM_BASE_UNIT_SHIFT 8
-#define PWM_ON_TIME_DIV_MASK 0x000000ff
+#define PWM_ON_TIME_DIV_MASK GENMASK(7, 0)
/* Size of each PWM register space if multiple */
#define PWM_SIZE 0x400
--
2.35.1
^ permalink raw reply related [flat|nested] 13+ messages in thread
* [PATCH v4 7/7] pwm: lpss: Add a comment to the bypass field
2022-09-27 16:24 [PATCH v4 0/7] pwm: lpss: Clean up and convert to a pure library Andy Shevchenko
` (5 preceding siblings ...)
2022-09-27 16:24 ` [PATCH v4 6/7] pwm: lpss: Make use of bits.h macros for all masks Andy Shevchenko
@ 2022-09-27 16:24 ` Andy Shevchenko
2022-09-28 14:22 ` [PATCH v4 0/7] pwm: lpss: Clean up and convert to a pure library Thierry Reding
7 siblings, 0 replies; 13+ messages in thread
From: Andy Shevchenko @ 2022-09-27 16:24 UTC (permalink / raw)
To: Hans de Goede, Uwe Kleine-König, Andy Shevchenko, linux-pwm,
linux-kernel
Cc: Thierry Reding
Add a comment to the bypass field based on the commit b997e3edca4f
("pwm: lpss: Set enable-bit before waiting for update-bit
to go low").
Signed-off-by: Andy Shevchenko <andriy.shevchenko@linux.intel.com>
Reviewed-by: Hans de Goede <hdegoede@redhat.com>
Acked-by: Uwe Kleine-König <u.kleine-koenig@pengutronix.de>
---
drivers/pwm/pwm-lpss.h | 5 +++++
1 file changed, 5 insertions(+)
diff --git a/drivers/pwm/pwm-lpss.h b/drivers/pwm/pwm-lpss.h
index c344921b2cab..8e82eb5a7e00 100644
--- a/drivers/pwm/pwm-lpss.h
+++ b/drivers/pwm/pwm-lpss.h
@@ -25,6 +25,11 @@ struct pwm_lpss_boardinfo {
unsigned long clk_rate;
unsigned int npwm;
unsigned long base_unit_bits;
+ /*
+ * Some versions of the IP may stuck in the state machine if enable
+ * bit is not set, and hence update bit will show busy status till
+ * the reset. For the rest it may be otherwise.
+ */
bool bypass;
/*
* On some devices the _PS0/_PS3 AML code of the GPU (GFX0) device
--
2.35.1
^ permalink raw reply related [flat|nested] 13+ messages in thread
* Re: [PATCH v4 6/7] pwm: lpss: Make use of bits.h macros for all masks
2022-09-27 16:24 ` [PATCH v4 6/7] pwm: lpss: Make use of bits.h macros for all masks Andy Shevchenko
@ 2022-09-28 14:20 ` Thierry Reding
2022-09-28 14:43 ` Andy Shevchenko
0 siblings, 1 reply; 13+ messages in thread
From: Thierry Reding @ 2022-09-28 14:20 UTC (permalink / raw)
To: Andy Shevchenko
Cc: Hans de Goede, Uwe Kleine-König, linux-pwm, linux-kernel
[-- Attachment #1: Type: text/plain, Size: 162 bytes --]
On Tue, Sep 27, 2022 at 07:24:20PM +0300, Andy Shevchenko wrote:
> Make use of the GENMASK() (far less error-prone, far more concise).
Very subjective.
Thierry
[-- Attachment #2: signature.asc --]
[-- Type: application/pgp-signature, Size: 833 bytes --]
^ permalink raw reply [flat|nested] 13+ messages in thread
* Re: [PATCH v4 0/7] pwm: lpss: Clean up and convert to a pure library
2022-09-27 16:24 [PATCH v4 0/7] pwm: lpss: Clean up and convert to a pure library Andy Shevchenko
` (6 preceding siblings ...)
2022-09-27 16:24 ` [PATCH v4 7/7] pwm: lpss: Add a comment to the bypass field Andy Shevchenko
@ 2022-09-28 14:22 ` Thierry Reding
2022-09-28 14:45 ` Andy Shevchenko
7 siblings, 1 reply; 13+ messages in thread
From: Thierry Reding @ 2022-09-28 14:22 UTC (permalink / raw)
To: Andy Shevchenko
Cc: Hans de Goede, Uwe Kleine-König, linux-pwm, linux-kernel
[-- Attachment #1: Type: text/plain, Size: 1749 bytes --]
On Tue, Sep 27, 2022 at 07:24:14PM +0300, Andy Shevchenko wrote:
> First of all, a set of cleanups and code deduplications (for better
> maintenance) to the PWM LPSS driver.
>
> Second, we may (re-)use the core part as a library in the future in
> the devices that combine the same PWM IP in their address space. So
> convert the core file to be a pure library which doesn't require any
> special resource handling or alike.
>
> Changelog v4:
> - dropped the forward declaration use patch, seems too many questions to it
>
> Changelog v3:
> - postponed last patch until we have a new user
> - added tags (Uwe, Hans)
> - expanded commit message on why forward declarations are preferred over
> full header inclusions
>
> Changelog v2:
> - replace patch 1 by Uwe's version (Uwe)
> - update NS patch to have a default namespace defined (Uwe)
> - describe all changes done in patch 4 (Uwe)
>
>
> Andy Shevchenko (6):
> pwm: lpss: Move exported symbols to PWM_LPSS namespace
> pwm: lpss: Move resource mapping to the glue drivers
> pwm: lpss: Use device_get_match_data to get device data
> pwm: lpss: Use DEFINE_RUNTIME_DEV_PM_OPS() and pm_ptr() macros
> pwm: lpss: Make use of bits.h macros for all masks
> pwm: lpss: Add a comment to the bypass field
>
> Uwe Kleine-König (1):
> pwm: lpss: Deduplicate board info data structures
>
> drivers/pwm/pwm-lpss-pci.c | 48 ++++++++-------------------------
> drivers/pwm/pwm-lpss-platform.c | 40 +++++++--------------------
> drivers/pwm/pwm-lpss.c | 46 ++++++++++++++++++++++++++-----
> drivers/pwm/pwm-lpss.h | 12 ++++++++-
> 4 files changed, 72 insertions(+), 74 deletions(-)
Series applied, thanks.
Thierry
[-- Attachment #2: signature.asc --]
[-- Type: application/pgp-signature, Size: 833 bytes --]
^ permalink raw reply [flat|nested] 13+ messages in thread
* Re: [PATCH v4 6/7] pwm: lpss: Make use of bits.h macros for all masks
2022-09-28 14:20 ` Thierry Reding
@ 2022-09-28 14:43 ` Andy Shevchenko
2022-09-28 14:49 ` Thierry Reding
0 siblings, 1 reply; 13+ messages in thread
From: Andy Shevchenko @ 2022-09-28 14:43 UTC (permalink / raw)
To: Thierry Reding
Cc: Hans de Goede, Uwe Kleine-König, linux-pwm, linux-kernel
On Wed, Sep 28, 2022 at 04:20:46PM +0200, Thierry Reding wrote:
> On Tue, Sep 27, 2022 at 07:24:20PM +0300, Andy Shevchenko wrote:
> > Make use of the GENMASK() (far less error-prone, far more concise).
>
> Very subjective.
See an example why not: 0a90ed8d0cfa ("platform/x86: pmc_atom: Fix SLP_TYPx
bitfield mask").
--
With Best Regards,
Andy Shevchenko
^ permalink raw reply [flat|nested] 13+ messages in thread
* Re: [PATCH v4 0/7] pwm: lpss: Clean up and convert to a pure library
2022-09-28 14:22 ` [PATCH v4 0/7] pwm: lpss: Clean up and convert to a pure library Thierry Reding
@ 2022-09-28 14:45 ` Andy Shevchenko
0 siblings, 0 replies; 13+ messages in thread
From: Andy Shevchenko @ 2022-09-28 14:45 UTC (permalink / raw)
To: Thierry Reding
Cc: Hans de Goede, Uwe Kleine-König, linux-pwm, linux-kernel
On Wed, Sep 28, 2022 at 04:22:18PM +0200, Thierry Reding wrote:
> On Tue, Sep 27, 2022 at 07:24:14PM +0300, Andy Shevchenko wrote:
> > First of all, a set of cleanups and code deduplications (for better
> > maintenance) to the PWM LPSS driver.
> >
> > Second, we may (re-)use the core part as a library in the future in
> > the devices that combine the same PWM IP in their address space. So
> > convert the core file to be a pure library which doesn't require any
> > special resource handling or alike.
> Series applied, thanks.
Thank you!
--
With Best Regards,
Andy Shevchenko
^ permalink raw reply [flat|nested] 13+ messages in thread
* Re: [PATCH v4 6/7] pwm: lpss: Make use of bits.h macros for all masks
2022-09-28 14:43 ` Andy Shevchenko
@ 2022-09-28 14:49 ` Thierry Reding
0 siblings, 0 replies; 13+ messages in thread
From: Thierry Reding @ 2022-09-28 14:49 UTC (permalink / raw)
To: Andy Shevchenko
Cc: Hans de Goede, Uwe Kleine-König, linux-pwm, linux-kernel
[-- Attachment #1: Type: text/plain, Size: 621 bytes --]
On Wed, Sep 28, 2022 at 05:43:07PM +0300, Andy Shevchenko wrote:
> On Wed, Sep 28, 2022 at 04:20:46PM +0200, Thierry Reding wrote:
> > On Tue, Sep 27, 2022 at 07:24:20PM +0300, Andy Shevchenko wrote:
> > > Make use of the GENMASK() (far less error-prone, far more concise).
> >
> > Very subjective.
>
> See an example why not: 0a90ed8d0cfa ("platform/x86: pmc_atom: Fix SLP_TYPx
> bitfield mask").
Hardly comparable to this particular case. And really this is stuff
that's getting on my nerves. People constantly replacing perfectly fine
code with something equivalent just for the sake of it.
Thierry
[-- Attachment #2: signature.asc --]
[-- Type: application/pgp-signature, Size: 833 bytes --]
^ permalink raw reply [flat|nested] 13+ messages in thread
end of thread, other threads:[~2022-09-28 14:50 UTC | newest]
Thread overview: 13+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2022-09-27 16:24 [PATCH v4 0/7] pwm: lpss: Clean up and convert to a pure library Andy Shevchenko
2022-09-27 16:24 ` [PATCH v4 1/7] pwm: lpss: Deduplicate board info data structures Andy Shevchenko
2022-09-27 16:24 ` [PATCH v4 2/7] pwm: lpss: Move exported symbols to PWM_LPSS namespace Andy Shevchenko
2022-09-27 16:24 ` [PATCH v4 3/7] pwm: lpss: Move resource mapping to the glue drivers Andy Shevchenko
2022-09-27 16:24 ` [PATCH v4 4/7] pwm: lpss: Use device_get_match_data to get device data Andy Shevchenko
2022-09-27 16:24 ` [PATCH v4 5/7] pwm: lpss: Use DEFINE_RUNTIME_DEV_PM_OPS() and pm_ptr() macros Andy Shevchenko
2022-09-27 16:24 ` [PATCH v4 6/7] pwm: lpss: Make use of bits.h macros for all masks Andy Shevchenko
2022-09-28 14:20 ` Thierry Reding
2022-09-28 14:43 ` Andy Shevchenko
2022-09-28 14:49 ` Thierry Reding
2022-09-27 16:24 ` [PATCH v4 7/7] pwm: lpss: Add a comment to the bypass field Andy Shevchenko
2022-09-28 14:22 ` [PATCH v4 0/7] pwm: lpss: Clean up and convert to a pure library Thierry Reding
2022-09-28 14:45 ` Andy Shevchenko
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox