Inter-revision diff: patch 11

Comparing v5 (message) to v8 (message)

--- v5
+++ v8
@@ -5,6 +5,15 @@
 Signed-off-by: Nicolas Saenz Julienne <nsaenzjulienne@suse.de>
 
 ---
+
+Changes since v7:
+ - Remove unwarranted RPI_PWM_DEF_DUTY_REG usage
+
+ Changes since v6:
+- Use %pe
+- Round divisions properly
+- Use dev_err_probe()
+- Pass check_patch
 
 Changes since v3:
  - Rename compatible string to be more explicit WRT to bus's limitations
@@ -24,15 +33,15 @@
 
  drivers/pwm/Kconfig               |   9 ++
  drivers/pwm/Makefile              |   1 +
- drivers/pwm/pwm-raspberrypi-poe.c | 216 ++++++++++++++++++++++++++++++
- 3 files changed, 226 insertions(+)
+ drivers/pwm/pwm-raspberrypi-poe.c | 206 ++++++++++++++++++++++++++++++
+ 3 files changed, 216 insertions(+)
  create mode 100644 drivers/pwm/pwm-raspberrypi-poe.c
 
 diff --git a/drivers/pwm/Kconfig b/drivers/pwm/Kconfig
-index 0937e1c047ac..75e2344703b3 100644
+index a7a7a9f26aef..d3371ac7b871 100644
 --- a/drivers/pwm/Kconfig
 +++ b/drivers/pwm/Kconfig
-@@ -423,6 +423,15 @@ config PWM_PXA
+@@ -431,6 +431,15 @@ config PWM_PXA
  	  To compile this driver as a module, choose M here: the module
  	  will be called pwm-pxa.
  
@@ -49,10 +58,10 @@
  	tristate "Renesas R-Car PWM support"
  	depends on ARCH_RENESAS || COMPILE_TEST
 diff --git a/drivers/pwm/Makefile b/drivers/pwm/Makefile
-index 18b89d7fd092..ed28d7bd4c64 100644
+index 4e35a55fa7b6..d3879619bd76 100644
 --- a/drivers/pwm/Makefile
 +++ b/drivers/pwm/Makefile
-@@ -38,6 +38,7 @@ obj-$(CONFIG_PWM_MXS)		+= pwm-mxs.o
+@@ -39,6 +39,7 @@ obj-$(CONFIG_PWM_NTXEC)		+= pwm-ntxec.o
  obj-$(CONFIG_PWM_OMAP_DMTIMER)	+= pwm-omap-dmtimer.o
  obj-$(CONFIG_PWM_PCA9685)	+= pwm-pca9685.o
  obj-$(CONFIG_PWM_PXA)		+= pwm-pxa.o
@@ -62,10 +71,10 @@
  obj-$(CONFIG_PWM_ROCKCHIP)	+= pwm-rockchip.o
 diff --git a/drivers/pwm/pwm-raspberrypi-poe.c b/drivers/pwm/pwm-raspberrypi-poe.c
 new file mode 100644
-index 000000000000..24b498839fcc
+index 000000000000..71ade5e55069
 --- /dev/null
 +++ b/drivers/pwm/pwm-raspberrypi-poe.c
-@@ -0,0 +1,216 @@
+@@ -0,0 +1,206 @@
 +// SPDX-License-Identifier: GPL-2.0
 +/*
 + * Copyright 2020 Nicolas Saenz Julienne <nsaenzjulienne@suse.de>
@@ -92,7 +101,6 @@
 +#define RPI_PWM_PERIOD_NS		80000 /* 12.5 kHz */
 +
 +#define RPI_PWM_CUR_DUTY_REG		0x0
-+#define RPI_PWM_DEF_DUTY_REG		0x1
 +
 +struct raspberrypi_pwm {
 +	struct rpi_firmware *firmware;
@@ -106,7 +114,8 @@
 +	__le32 ret;
 +} __packed;
 +
-+static inline struct raspberrypi_pwm *to_raspberrypi_pwm(struct pwm_chip *chip)
++static inline
++struct raspberrypi_pwm *raspberrypi_pwm_from_chip(struct pwm_chip *chip)
 +{
 +	return container_of(chip, struct raspberrypi_pwm, chip);
 +}
@@ -154,33 +163,33 @@
 +				      struct pwm_device *pwm,
 +				      struct pwm_state *state)
 +{
-+	struct raspberrypi_pwm *rpipwm = to_raspberrypi_pwm(chip);
++	struct raspberrypi_pwm *rpipwm = raspberrypi_pwm_from_chip(chip);
 +
 +	state->period = RPI_PWM_PERIOD_NS;
-+	state->duty_cycle = DIV_ROUND_CLOSEST(rpipwm->duty_cycle * RPI_PWM_PERIOD_NS,
-+					      RPI_PWM_MAX_DUTY);
++	state->duty_cycle = DIV_ROUND_UP(rpipwm->duty_cycle * RPI_PWM_PERIOD_NS,
++					 RPI_PWM_MAX_DUTY);
 +	state->enabled = !!(rpipwm->duty_cycle);
 +	state->polarity = PWM_POLARITY_NORMAL;
 +}
 +
 +static int raspberrypi_pwm_apply(struct pwm_chip *chip, struct pwm_device *pwm,
-+			         const struct pwm_state *state)
-+{
-+	struct raspberrypi_pwm *rpipwm = to_raspberrypi_pwm(chip);
++				 const struct pwm_state *state)
++{
++	struct raspberrypi_pwm *rpipwm = raspberrypi_pwm_from_chip(chip);
 +	unsigned int duty_cycle;
 +	int ret;
 +
-+        if (state->period < RPI_PWM_PERIOD_NS ||
-+            state->polarity != PWM_POLARITY_NORMAL)
-+                return -EINVAL;
-+
-+        if (!state->enabled)
-+                duty_cycle = 0;
-+        else if (state->duty_cycle < RPI_PWM_PERIOD_NS)
-+                duty_cycle = DIV_ROUND_CLOSEST_ULL(state->duty_cycle * RPI_PWM_MAX_DUTY,
-+					           RPI_PWM_PERIOD_NS);
-+        else
-+                duty_cycle = RPI_PWM_MAX_DUTY;
++	if (state->period < RPI_PWM_PERIOD_NS ||
++	    state->polarity != PWM_POLARITY_NORMAL)
++		return -EINVAL;
++
++	if (!state->enabled)
++		duty_cycle = 0;
++	else if (state->duty_cycle < RPI_PWM_PERIOD_NS)
++		duty_cycle = DIV_ROUND_DOWN_ULL(state->duty_cycle * RPI_PWM_MAX_DUTY,
++						RPI_PWM_PERIOD_NS);
++	else
++		duty_cycle = RPI_PWM_MAX_DUTY;
 +
 +	if (duty_cycle == rpipwm->duty_cycle)
 +		return 0;
@@ -188,23 +197,12 @@
 +	ret = raspberrypi_pwm_set_property(rpipwm->firmware, RPI_PWM_CUR_DUTY_REG,
 +					   duty_cycle);
 +	if (ret) {
-+		dev_err(chip->dev, "Failed to set duty cycle: %d\n", ret);
++		dev_err(chip->dev, "Failed to set duty cycle: %pe\n",
++			ERR_PTR(ret));
 +		return ret;
 +	}
 +
-+	/*
-+	 * This sets the default duty cycle after resetting the board, we
-+	 * updated it every time to mimic Raspberry Pi's downstream's driver
-+	 * behaviour.
-+	 */
-+	ret = raspberrypi_pwm_set_property(rpipwm->firmware, RPI_PWM_DEF_DUTY_REG,
-+					   duty_cycle);
-+	if (ret) {
-+		dev_err(chip->dev, "Failed to set default duty cycle: %d\n", ret);
-+		return ret;
-+	}
-+
-+        rpipwm->duty_cycle = duty_cycle;
++	rpipwm->duty_cycle = duty_cycle;
 +
 +	return 0;
 +}
@@ -232,7 +230,8 @@
 +	firmware = devm_rpi_firmware_get(&pdev->dev, firmware_node);
 +	of_node_put(firmware_node);
 +	if (!firmware)
-+		return -EPROBE_DEFER;
++		return dev_err_probe(dev, -EPROBE_DEFER,
++				     "Failed to get firmware handle\n");
 +
 +	rpipwm = devm_kzalloc(&pdev->dev, sizeof(*rpipwm), GFP_KERNEL);
 +	if (!rpipwm)
@@ -249,7 +248,7 @@
 +	ret = raspberrypi_pwm_get_property(rpipwm->firmware, RPI_PWM_CUR_DUTY_REG,
 +					   &rpipwm->duty_cycle);
 +	if (ret) {
-+		dev_err(dev, "Failed to get duty cycle: %d\n", ret);
++		dev_err(dev, "Failed to get duty cycle: %pe\n", ERR_PTR(ret));
 +		return ret;
 +	}
 +
@@ -280,8 +279,8 @@
 +module_platform_driver(raspberrypi_pwm_driver);
 +
 +MODULE_AUTHOR("Nicolas Saenz Julienne <nsaenzjulienne@suse.de>");
-+MODULE_DESCRIPTION("Raspberry Pi Firwmare Based PWM Bus Driver");
++MODULE_DESCRIPTION("Raspberry Pi Firmware Based PWM Bus Driver");
 +MODULE_LICENSE("GPL v2");
 -- 
-2.29.2
-
+2.30.1
+
Keyboard shortcuts
hback out one level
jnext message in thread
kprevious message in thread
ldrill in
Escclose help / fold thread tree
?toggle this help