linux-media.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
* [PATCH 00/10] media: rc: gpio-ir-recv: driver update
@ 2017-09-06  8:07 Ladislav Michl
  2017-09-06  8:08 ` [PATCH 01/10] media: rc: gpio-ir-recv: use helper vaiable to acess device info Ladislav Michl
                   ` (9 more replies)
  0 siblings, 10 replies; 11+ messages in thread
From: Ladislav Michl @ 2017-09-06  8:07 UTC (permalink / raw)
  To: linux-media; +Cc: Mauro Carvalho Chehab, Sean Young, Andi Shyti

This patch serie brings driver closer to recently used APIs
and removes no longer used gpio_ir_recv_platform_data
support.

It was done as an excercise before writing similar driver using
FIQ and hw timers as this one gives too imprecise timing.

Ladislav Michl (10):
  media: rc: gpio-ir-recv: use helper vaiable to acess device info
  media: rc: gpio-ir-recv: use devm_kzalloc
  media: rc: gpio-ir-recv: use devm_rc_allocate_device
  media: rc: gpio-ir-recv: use devm_gpio_request_one
  media: rc: gpio-ir-recv: use devm_rc_register_device
  media: rc: gpio-ir-recv: do not allow threaded interrupt handler
  media: rc: gpio-ir-recv: use devm_request_irq
  media: rc: gpio-ir-recv: use KBUILD_MODNAME
  media: rc: gpio-ir-recv: remove gpio_ir_recv_platform_data
  media: rc: gpio-ir-recv: use gpiolib API

 drivers/media/rc/Kconfig                         |   1 +
 drivers/media/rc/gpio-ir-recv.c                  | 191 +++++++----------------
 include/linux/platform_data/media/gpio-ir-recv.h |  23 ---
 3 files changed, 58 insertions(+), 157 deletions(-)
 delete mode 100644 include/linux/platform_data/media/gpio-ir-recv.h

-- 
2.11.0

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

* [PATCH 01/10] media: rc: gpio-ir-recv: use helper vaiable to acess device info
  2017-09-06  8:07 [PATCH 00/10] media: rc: gpio-ir-recv: driver update Ladislav Michl
@ 2017-09-06  8:08 ` Ladislav Michl
  2017-09-06  8:09 ` [PATCH 02/10] media: rc: gpio-ir-recv: use devm_kzalloc Ladislav Michl
                   ` (8 subsequent siblings)
  9 siblings, 0 replies; 11+ messages in thread
From: Ladislav Michl @ 2017-09-06  8:08 UTC (permalink / raw)
  To: linux-media; +Cc: Mauro Carvalho Chehab, Sean Young, Andi Shyti

Using explicit struct device variable makes code a bit more readable.

Signed-off-by: Ladislav Michl <ladis@linux-mips.org>
---
 drivers/media/rc/gpio-ir-recv.c | 12 ++++++------
 1 file changed, 6 insertions(+), 6 deletions(-)

diff --git a/drivers/media/rc/gpio-ir-recv.c b/drivers/media/rc/gpio-ir-recv.c
index b4f773b9dc1d..2f6233186ce9 100644
--- a/drivers/media/rc/gpio-ir-recv.c
+++ b/drivers/media/rc/gpio-ir-recv.c
@@ -116,18 +116,18 @@ static void flush_timer(unsigned long arg)
 
 static int gpio_ir_recv_probe(struct platform_device *pdev)
 {
+	struct device *dev = &pdev->dev;
 	struct gpio_rc_dev *gpio_dev;
 	struct rc_dev *rcdev;
-	const struct gpio_ir_recv_platform_data *pdata =
-					pdev->dev.platform_data;
+	const struct gpio_ir_recv_platform_data *pdata = dev->platform_data;
 	int rc;
 
 	if (pdev->dev.of_node) {
 		struct gpio_ir_recv_platform_data *dtpdata =
-			devm_kzalloc(&pdev->dev, sizeof(*dtpdata), GFP_KERNEL);
+			devm_kzalloc(dev, sizeof(*dtpdata), GFP_KERNEL);
 		if (!dtpdata)
 			return -ENOMEM;
-		rc = gpio_ir_recv_get_devtree_pdata(&pdev->dev, dtpdata);
+		rc = gpio_ir_recv_get_devtree_pdata(dev, dtpdata);
 		if (rc)
 			return rc;
 		pdata = dtpdata;
@@ -156,7 +156,7 @@ static int gpio_ir_recv_probe(struct platform_device *pdev)
 	rcdev->input_id.vendor = 0x0001;
 	rcdev->input_id.product = 0x0001;
 	rcdev->input_id.version = 0x0100;
-	rcdev->dev.parent = &pdev->dev;
+	rcdev->dev.parent = dev;
 	rcdev->driver_name = GPIO_IR_DRIVER_NAME;
 	rcdev->min_timeout = 1;
 	rcdev->timeout = IR_DEFAULT_TIMEOUT;
@@ -183,7 +183,7 @@ static int gpio_ir_recv_probe(struct platform_device *pdev)
 
 	rc = rc_register_device(rcdev);
 	if (rc < 0) {
-		dev_err(&pdev->dev, "failed to register rc device\n");
+		dev_err(dev, "failed to register rc device\n");
 		goto err_register_rc_device;
 	}
 
-- 
2.11.0

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

* [PATCH 02/10] media: rc: gpio-ir-recv: use devm_kzalloc
  2017-09-06  8:07 [PATCH 00/10] media: rc: gpio-ir-recv: driver update Ladislav Michl
  2017-09-06  8:08 ` [PATCH 01/10] media: rc: gpio-ir-recv: use helper vaiable to acess device info Ladislav Michl
@ 2017-09-06  8:09 ` Ladislav Michl
  2017-09-06  8:10 ` [PATCH 03/10] media: rc: gpio-ir-recv: use devm_rc_allocate_device Ladislav Michl
                   ` (7 subsequent siblings)
  9 siblings, 0 replies; 11+ messages in thread
From: Ladislav Michl @ 2017-09-06  8:09 UTC (permalink / raw)
  To: linux-media; +Cc: Mauro Carvalho Chehab, Sean Young, Andi Shyti

Use of devm_kzalloc simplifies error unwinding.

Signed-off-by: Ladislav Michl <ladis@linux-mips.org>
---
 drivers/media/rc/gpio-ir-recv.c | 11 +++--------
 1 file changed, 3 insertions(+), 8 deletions(-)

diff --git a/drivers/media/rc/gpio-ir-recv.c b/drivers/media/rc/gpio-ir-recv.c
index 2f6233186ce9..fd5742b23447 100644
--- a/drivers/media/rc/gpio-ir-recv.c
+++ b/drivers/media/rc/gpio-ir-recv.c
@@ -139,15 +139,13 @@ static int gpio_ir_recv_probe(struct platform_device *pdev)
 	if (pdata->gpio_nr < 0)
 		return -EINVAL;
 
-	gpio_dev = kzalloc(sizeof(struct gpio_rc_dev), GFP_KERNEL);
+	gpio_dev = devm_kzalloc(dev, sizeof(struct gpio_rc_dev), GFP_KERNEL);
 	if (!gpio_dev)
 		return -ENOMEM;
 
 	rcdev = rc_allocate_device(RC_DRIVER_IR_RAW);
-	if (!rcdev) {
-		rc = -ENOMEM;
-		goto err_allocate_device;
-	}
+	if (!rcdev)
+		return -ENOMEM;
 
 	rcdev->priv = gpio_dev;
 	rcdev->input_name = GPIO_IR_DEVICE_NAME;
@@ -206,8 +204,6 @@ static int gpio_ir_recv_probe(struct platform_device *pdev)
 	gpio_free(pdata->gpio_nr);
 err_gpio_request:
 	rc_free_device(rcdev);
-err_allocate_device:
-	kfree(gpio_dev);
 	return rc;
 }
 
@@ -219,7 +215,6 @@ static int gpio_ir_recv_remove(struct platform_device *pdev)
 	del_timer_sync(&gpio_dev->flush_timer);
 	rc_unregister_device(gpio_dev->rcdev);
 	gpio_free(gpio_dev->gpio_nr);
-	kfree(gpio_dev);
 	return 0;
 }
 
-- 
2.11.0

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

* [PATCH 03/10] media: rc: gpio-ir-recv: use devm_rc_allocate_device
  2017-09-06  8:07 [PATCH 00/10] media: rc: gpio-ir-recv: driver update Ladislav Michl
  2017-09-06  8:08 ` [PATCH 01/10] media: rc: gpio-ir-recv: use helper vaiable to acess device info Ladislav Michl
  2017-09-06  8:09 ` [PATCH 02/10] media: rc: gpio-ir-recv: use devm_kzalloc Ladislav Michl
@ 2017-09-06  8:10 ` Ladislav Michl
  2017-09-06  8:10 ` [PATCH 04/10] media: rc: gpio-ir-recv: use devm_gpio_request_one Ladislav Michl
                   ` (6 subsequent siblings)
  9 siblings, 0 replies; 11+ messages in thread
From: Ladislav Michl @ 2017-09-06  8:10 UTC (permalink / raw)
  To: linux-media; +Cc: Mauro Carvalho Chehab, Sean Young, Andi Shyti

Use of devm_rc_allocate_device simplifies error unwinding.

Signed-off-by: Ladislav Michl <ladis@linux-mips.org>
---
 drivers/media/rc/gpio-ir-recv.c | 6 ++----
 1 file changed, 2 insertions(+), 4 deletions(-)

diff --git a/drivers/media/rc/gpio-ir-recv.c b/drivers/media/rc/gpio-ir-recv.c
index fd5742b23447..0e0b6988c08e 100644
--- a/drivers/media/rc/gpio-ir-recv.c
+++ b/drivers/media/rc/gpio-ir-recv.c
@@ -143,7 +143,7 @@ static int gpio_ir_recv_probe(struct platform_device *pdev)
 	if (!gpio_dev)
 		return -ENOMEM;
 
-	rcdev = rc_allocate_device(RC_DRIVER_IR_RAW);
+	rcdev = devm_rc_allocate_device(dev, RC_DRIVER_IR_RAW);
 	if (!rcdev)
 		return -ENOMEM;
 
@@ -174,7 +174,7 @@ static int gpio_ir_recv_probe(struct platform_device *pdev)
 
 	rc = gpio_request(pdata->gpio_nr, "gpio-ir-recv");
 	if (rc < 0)
-		goto err_gpio_request;
+		return rc;
 	rc  = gpio_direction_input(pdata->gpio_nr);
 	if (rc < 0)
 		goto err_gpio_direction_input;
@@ -202,8 +202,6 @@ static int gpio_ir_recv_probe(struct platform_device *pdev)
 err_register_rc_device:
 err_gpio_direction_input:
 	gpio_free(pdata->gpio_nr);
-err_gpio_request:
-	rc_free_device(rcdev);
 	return rc;
 }
 
-- 
2.11.0

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

* [PATCH 04/10] media: rc: gpio-ir-recv: use devm_gpio_request_one
  2017-09-06  8:07 [PATCH 00/10] media: rc: gpio-ir-recv: driver update Ladislav Michl
                   ` (2 preceding siblings ...)
  2017-09-06  8:10 ` [PATCH 03/10] media: rc: gpio-ir-recv: use devm_rc_allocate_device Ladislav Michl
@ 2017-09-06  8:10 ` Ladislav Michl
  2017-09-06  8:11 ` [PATCH 05/10] media: rc: gpio-ir-recv: use devm_rc_register_device Ladislav Michl
                   ` (5 subsequent siblings)
  9 siblings, 0 replies; 11+ messages in thread
From: Ladislav Michl @ 2017-09-06  8:10 UTC (permalink / raw)
  To: linux-media; +Cc: Mauro Carvalho Chehab, Sean Young, Andi Shyti

Use of devm_gpio_request_one simplifies error unwinding.

Signed-off-by: Ladislav Michl <ladis@linux-mips.org>
---
 drivers/media/rc/gpio-ir-recv.c | 9 ++-------
 1 file changed, 2 insertions(+), 7 deletions(-)

diff --git a/drivers/media/rc/gpio-ir-recv.c b/drivers/media/rc/gpio-ir-recv.c
index 0e0b6988c08e..4b71f7ae9132 100644
--- a/drivers/media/rc/gpio-ir-recv.c
+++ b/drivers/media/rc/gpio-ir-recv.c
@@ -172,12 +172,10 @@ static int gpio_ir_recv_probe(struct platform_device *pdev)
 	setup_timer(&gpio_dev->flush_timer, flush_timer,
 		    (unsigned long)gpio_dev);
 
-	rc = gpio_request(pdata->gpio_nr, "gpio-ir-recv");
+	rc = devm_gpio_request_one(dev, pdata->gpio_nr, GPIOF_DIR_IN,
+					"gpio-ir-recv");
 	if (rc < 0)
 		return rc;
-	rc  = gpio_direction_input(pdata->gpio_nr);
-	if (rc < 0)
-		goto err_gpio_direction_input;
 
 	rc = rc_register_device(rcdev);
 	if (rc < 0) {
@@ -200,8 +198,6 @@ static int gpio_ir_recv_probe(struct platform_device *pdev)
 	rc_unregister_device(rcdev);
 	rcdev = NULL;
 err_register_rc_device:
-err_gpio_direction_input:
-	gpio_free(pdata->gpio_nr);
 	return rc;
 }
 
@@ -212,7 +208,6 @@ static int gpio_ir_recv_remove(struct platform_device *pdev)
 	free_irq(gpio_to_irq(gpio_dev->gpio_nr), gpio_dev);
 	del_timer_sync(&gpio_dev->flush_timer);
 	rc_unregister_device(gpio_dev->rcdev);
-	gpio_free(gpio_dev->gpio_nr);
 	return 0;
 }
 
-- 
2.11.0

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

* [PATCH 05/10] media: rc: gpio-ir-recv: use devm_rc_register_device
  2017-09-06  8:07 [PATCH 00/10] media: rc: gpio-ir-recv: driver update Ladislav Michl
                   ` (3 preceding siblings ...)
  2017-09-06  8:10 ` [PATCH 04/10] media: rc: gpio-ir-recv: use devm_gpio_request_one Ladislav Michl
@ 2017-09-06  8:11 ` Ladislav Michl
  2017-09-06  8:12 ` [PATCH 06/10] media: rc: gpio-ir-recv: do not allow threaded interrupt handler Ladislav Michl
                   ` (4 subsequent siblings)
  9 siblings, 0 replies; 11+ messages in thread
From: Ladislav Michl @ 2017-09-06  8:11 UTC (permalink / raw)
  To: linux-media; +Cc: Mauro Carvalho Chehab, Sean Young, Andi Shyti

Use of devm_rc_register_device simplifies error unwinding.

Signed-off-by: Ladislav Michl <ladis@linux-mips.org>
---
 drivers/media/rc/gpio-ir-recv.c | 8 ++------
 1 file changed, 2 insertions(+), 6 deletions(-)

diff --git a/drivers/media/rc/gpio-ir-recv.c b/drivers/media/rc/gpio-ir-recv.c
index 4b71f7ae9132..c78a7eaa5a1d 100644
--- a/drivers/media/rc/gpio-ir-recv.c
+++ b/drivers/media/rc/gpio-ir-recv.c
@@ -177,10 +177,10 @@ static int gpio_ir_recv_probe(struct platform_device *pdev)
 	if (rc < 0)
 		return rc;
 
-	rc = rc_register_device(rcdev);
+	rc = devm_rc_register_device(dev, rcdev);
 	if (rc < 0) {
 		dev_err(dev, "failed to register rc device\n");
-		goto err_register_rc_device;
+		return rc;
 	}
 
 	platform_set_drvdata(pdev, gpio_dev);
@@ -195,9 +195,6 @@ static int gpio_ir_recv_probe(struct platform_device *pdev)
 	return 0;
 
 err_request_irq:
-	rc_unregister_device(rcdev);
-	rcdev = NULL;
-err_register_rc_device:
 	return rc;
 }
 
@@ -207,7 +204,6 @@ static int gpio_ir_recv_remove(struct platform_device *pdev)
 
 	free_irq(gpio_to_irq(gpio_dev->gpio_nr), gpio_dev);
 	del_timer_sync(&gpio_dev->flush_timer);
-	rc_unregister_device(gpio_dev->rcdev);
 	return 0;
 }
 
-- 
2.11.0

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

* [PATCH 06/10] media: rc: gpio-ir-recv: do not allow threaded interrupt handler
  2017-09-06  8:07 [PATCH 00/10] media: rc: gpio-ir-recv: driver update Ladislav Michl
                   ` (4 preceding siblings ...)
  2017-09-06  8:11 ` [PATCH 05/10] media: rc: gpio-ir-recv: use devm_rc_register_device Ladislav Michl
@ 2017-09-06  8:12 ` Ladislav Michl
  2017-09-06  8:12 ` [PATCH 07/10] media: rc: gpio-ir-recv: use devm_request_irq Ladislav Michl
                   ` (3 subsequent siblings)
  9 siblings, 0 replies; 11+ messages in thread
From: Ladislav Michl @ 2017-09-06  8:12 UTC (permalink / raw)
  To: linux-media; +Cc: Mauro Carvalho Chehab, Sean Young, Andi Shyti

Requesting any context irq is not actually great idea since threaded
interrupt handler is run at too unpredictable time which turns
timing information wrong. Fix it by requesting regular interrupt.

Signed-off-by: Ladislav Michl <ladis@linux-mips.org>
---
 drivers/media/rc/gpio-ir-recv.c | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/drivers/media/rc/gpio-ir-recv.c b/drivers/media/rc/gpio-ir-recv.c
index c78a7eaa5a1d..1d84085f1021 100644
--- a/drivers/media/rc/gpio-ir-recv.c
+++ b/drivers/media/rc/gpio-ir-recv.c
@@ -185,7 +185,7 @@ static int gpio_ir_recv_probe(struct platform_device *pdev)
 
 	platform_set_drvdata(pdev, gpio_dev);
 
-	rc = request_any_context_irq(gpio_to_irq(pdata->gpio_nr),
+	rc = request_irq(gpio_to_irq(pdata->gpio_nr),
 				gpio_ir_recv_irq,
 			IRQF_TRIGGER_FALLING | IRQF_TRIGGER_RISING,
 					"gpio-ir-recv-irq", gpio_dev);
-- 
2.11.0

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

* [PATCH 07/10] media: rc: gpio-ir-recv: use devm_request_irq
  2017-09-06  8:07 [PATCH 00/10] media: rc: gpio-ir-recv: driver update Ladislav Michl
                   ` (5 preceding siblings ...)
  2017-09-06  8:12 ` [PATCH 06/10] media: rc: gpio-ir-recv: do not allow threaded interrupt handler Ladislav Michl
@ 2017-09-06  8:12 ` Ladislav Michl
  2017-09-06  8:13 ` [PATCH 08/10] media: rc: gpio-ir-recv: use KBUILD_MODNAME Ladislav Michl
                   ` (2 subsequent siblings)
  9 siblings, 0 replies; 11+ messages in thread
From: Ladislav Michl @ 2017-09-06  8:12 UTC (permalink / raw)
  To: linux-media; +Cc: Mauro Carvalho Chehab, Sean Young, Andi Shyti

Use of devm_request_irq simplifies error unwinding.

Signed-off-by: Ladislav Michl <ladis@linux-mips.org>
---
 drivers/media/rc/gpio-ir-recv.c | 14 +++-----------
 1 file changed, 3 insertions(+), 11 deletions(-)

diff --git a/drivers/media/rc/gpio-ir-recv.c b/drivers/media/rc/gpio-ir-recv.c
index 1d84085f1021..68278109f460 100644
--- a/drivers/media/rc/gpio-ir-recv.c
+++ b/drivers/media/rc/gpio-ir-recv.c
@@ -185,24 +185,16 @@ static int gpio_ir_recv_probe(struct platform_device *pdev)
 
 	platform_set_drvdata(pdev, gpio_dev);
 
-	rc = request_irq(gpio_to_irq(pdata->gpio_nr),
+	return devm_request_irq(dev, gpio_to_irq(pdata->gpio_nr),
 				gpio_ir_recv_irq,
-			IRQF_TRIGGER_FALLING | IRQF_TRIGGER_RISING,
-					"gpio-ir-recv-irq", gpio_dev);
-	if (rc < 0)
-		goto err_request_irq;
-
-	return 0;
-
-err_request_irq:
-	return rc;
+				IRQF_TRIGGER_FALLING | IRQF_TRIGGER_RISING,
+				"gpio-ir-recv-irq", gpio_dev);
 }
 
 static int gpio_ir_recv_remove(struct platform_device *pdev)
 {
 	struct gpio_rc_dev *gpio_dev = platform_get_drvdata(pdev);
 
-	free_irq(gpio_to_irq(gpio_dev->gpio_nr), gpio_dev);
 	del_timer_sync(&gpio_dev->flush_timer);
 	return 0;
 }
-- 
2.11.0

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

* [PATCH 08/10] media: rc: gpio-ir-recv: use KBUILD_MODNAME
  2017-09-06  8:07 [PATCH 00/10] media: rc: gpio-ir-recv: driver update Ladislav Michl
                   ` (6 preceding siblings ...)
  2017-09-06  8:12 ` [PATCH 07/10] media: rc: gpio-ir-recv: use devm_request_irq Ladislav Michl
@ 2017-09-06  8:13 ` Ladislav Michl
  2017-09-06  8:14 ` [PATCH 09/10] media: rc: gpio-ir-recv: remove gpio_ir_recv_platform_data Ladislav Michl
  2017-09-06  8:15 ` [PATCH 10/10] media: rc: gpio-ir-recv: use gpiolib API Ladislav Michl
  9 siblings, 0 replies; 11+ messages in thread
From: Ladislav Michl @ 2017-09-06  8:13 UTC (permalink / raw)
  To: linux-media; +Cc: Mauro Carvalho Chehab, Sean Young, Andi Shyti

There already is standard macro providing driver name, use it.

Signed-off-by: Ladislav Michl <ladis@linux-mips.org>
---
 drivers/media/rc/gpio-ir-recv.c | 5 ++---
 1 file changed, 2 insertions(+), 3 deletions(-)

diff --git a/drivers/media/rc/gpio-ir-recv.c b/drivers/media/rc/gpio-ir-recv.c
index 68278109f460..92a060f776d5 100644
--- a/drivers/media/rc/gpio-ir-recv.c
+++ b/drivers/media/rc/gpio-ir-recv.c
@@ -23,7 +23,6 @@
 #include <media/rc-core.h>
 #include <linux/platform_data/media/gpio-ir-recv.h>
 
-#define GPIO_IR_DRIVER_NAME	"gpio-rc-recv"
 #define GPIO_IR_DEVICE_NAME	"gpio_ir_recv"
 
 struct gpio_rc_dev {
@@ -155,7 +154,7 @@ static int gpio_ir_recv_probe(struct platform_device *pdev)
 	rcdev->input_id.product = 0x0001;
 	rcdev->input_id.version = 0x0100;
 	rcdev->dev.parent = dev;
-	rcdev->driver_name = GPIO_IR_DRIVER_NAME;
+	rcdev->driver_name = KBUILD_MODNAME;
 	rcdev->min_timeout = 1;
 	rcdev->timeout = IR_DEFAULT_TIMEOUT;
 	rcdev->max_timeout = 10 * IR_DEFAULT_TIMEOUT;
@@ -236,7 +235,7 @@ static struct platform_driver gpio_ir_recv_driver = {
 	.probe  = gpio_ir_recv_probe,
 	.remove = gpio_ir_recv_remove,
 	.driver = {
-		.name   = GPIO_IR_DRIVER_NAME,
+		.name   = KBUILD_MODNAME,
 		.of_match_table = of_match_ptr(gpio_ir_recv_of_match),
 #ifdef CONFIG_PM
 		.pm	= &gpio_ir_recv_pm_ops,
-- 
2.11.0

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

* [PATCH 09/10] media: rc: gpio-ir-recv: remove gpio_ir_recv_platform_data
  2017-09-06  8:07 [PATCH 00/10] media: rc: gpio-ir-recv: driver update Ladislav Michl
                   ` (7 preceding siblings ...)
  2017-09-06  8:13 ` [PATCH 08/10] media: rc: gpio-ir-recv: use KBUILD_MODNAME Ladislav Michl
@ 2017-09-06  8:14 ` Ladislav Michl
  2017-09-06  8:15 ` [PATCH 10/10] media: rc: gpio-ir-recv: use gpiolib API Ladislav Michl
  9 siblings, 0 replies; 11+ messages in thread
From: Ladislav Michl @ 2017-09-06  8:14 UTC (permalink / raw)
  To: linux-media; +Cc: Mauro Carvalho Chehab, Sean Young, Andi Shyti

gpio_ir_recv_platform_data are not used anywhere in kernel tree,
so remove it.

Signed-off-by: Ladislav Michl <ladis@linux-mips.org>
---
 drivers/media/rc/gpio-ir-recv.c                  | 98 +++++++-----------------
 include/linux/platform_data/media/gpio-ir-recv.h | 23 ------
 2 files changed, 29 insertions(+), 92 deletions(-)

diff --git a/drivers/media/rc/gpio-ir-recv.c b/drivers/media/rc/gpio-ir-recv.c
index 92a060f776d5..77498d0c8970 100644
--- a/drivers/media/rc/gpio-ir-recv.c
+++ b/drivers/media/rc/gpio-ir-recv.c
@@ -21,7 +21,6 @@
 #include <linux/platform_device.h>
 #include <linux/irq.h>
 #include <media/rc-core.h>
-#include <linux/platform_data/media/gpio-ir-recv.h>
 
 #define GPIO_IR_DEVICE_NAME	"gpio_ir_recv"
 
@@ -32,45 +31,6 @@ struct gpio_rc_dev {
 	struct timer_list flush_timer;
 };
 
-#ifdef CONFIG_OF
-/*
- * Translate OpenFirmware node properties into platform_data
- */
-static int gpio_ir_recv_get_devtree_pdata(struct device *dev,
-				  struct gpio_ir_recv_platform_data *pdata)
-{
-	struct device_node *np = dev->of_node;
-	enum of_gpio_flags flags;
-	int gpio;
-
-	gpio = of_get_gpio_flags(np, 0, &flags);
-	if (gpio < 0) {
-		if (gpio != -EPROBE_DEFER)
-			dev_err(dev, "Failed to get gpio flags (%d)\n", gpio);
-		return gpio;
-	}
-
-	pdata->gpio_nr = gpio;
-	pdata->active_low = (flags & OF_GPIO_ACTIVE_LOW);
-	/* probe() takes care of map_name == NULL or allowed_protos == 0 */
-	pdata->map_name = of_get_property(np, "linux,rc-map-name", NULL);
-	pdata->allowed_protos = 0;
-
-	return 0;
-}
-
-static const struct of_device_id gpio_ir_recv_of_match[] = {
-	{ .compatible = "gpio-ir-receiver", },
-	{ },
-};
-MODULE_DEVICE_TABLE(of, gpio_ir_recv_of_match);
-
-#else /* !CONFIG_OF */
-
-#define gpio_ir_recv_get_devtree_pdata(dev, pdata)	(-ENOSYS)
-
-#endif
-
 static irqreturn_t gpio_ir_recv_irq(int irq, void *dev_id)
 {
 	struct gpio_rc_dev *gpio_dev = dev_id;
@@ -115,33 +75,30 @@ static void flush_timer(unsigned long arg)
 
 static int gpio_ir_recv_probe(struct platform_device *pdev)
 {
-	struct device *dev = &pdev->dev;
-	struct gpio_rc_dev *gpio_dev;
-	struct rc_dev *rcdev;
-	const struct gpio_ir_recv_platform_data *pdata = dev->platform_data;
 	int rc;
+	enum of_gpio_flags flags;
+	struct rc_dev *rcdev;
+	struct gpio_rc_dev *gpio_dev;
+	struct device *dev = &pdev->dev;
+	struct device_node *np = dev->of_node;
 
-	if (pdev->dev.of_node) {
-		struct gpio_ir_recv_platform_data *dtpdata =
-			devm_kzalloc(dev, sizeof(*dtpdata), GFP_KERNEL);
-		if (!dtpdata)
-			return -ENOMEM;
-		rc = gpio_ir_recv_get_devtree_pdata(dev, dtpdata);
-		if (rc)
-			return rc;
-		pdata = dtpdata;
-	}
-
-	if (!pdata)
-		return -EINVAL;
-
-	if (pdata->gpio_nr < 0)
-		return -EINVAL;
+	if (!np)
+		return -ENODEV;
 
 	gpio_dev = devm_kzalloc(dev, sizeof(struct gpio_rc_dev), GFP_KERNEL);
 	if (!gpio_dev)
 		return -ENOMEM;
 
+	rc = of_get_gpio_flags(np, 0, &flags);
+	if (rc < 0) {
+		if (rc != -EPROBE_DEFER)
+			dev_err(dev, "Failed to get gpio flags (%d)\n", rc);
+		return rc;
+	}
+
+	gpio_dev->gpio_nr = rc;
+	gpio_dev->active_low = (flags & OF_GPIO_ACTIVE_LOW);
+
 	rcdev = devm_rc_allocate_device(dev, RC_DRIVER_IR_RAW);
 	if (!rcdev)
 		return -ENOMEM;
@@ -158,20 +115,17 @@ static int gpio_ir_recv_probe(struct platform_device *pdev)
 	rcdev->min_timeout = 1;
 	rcdev->timeout = IR_DEFAULT_TIMEOUT;
 	rcdev->max_timeout = 10 * IR_DEFAULT_TIMEOUT;
-	if (pdata->allowed_protos)
-		rcdev->allowed_protocols = pdata->allowed_protos;
-	else
-		rcdev->allowed_protocols = RC_BIT_ALL_IR_DECODER;
-	rcdev->map_name = pdata->map_name ?: RC_MAP_EMPTY;
+	rcdev->allowed_protocols = RC_BIT_ALL_IR_DECODER;
+	rcdev->map_name = of_get_property(np, "linux,rc-map-name", NULL);
+	if (!rcdev->map_name)
+		rcdev->map_name = RC_MAP_EMPTY;
 
 	gpio_dev->rcdev = rcdev;
-	gpio_dev->gpio_nr = pdata->gpio_nr;
-	gpio_dev->active_low = pdata->active_low;
 
 	setup_timer(&gpio_dev->flush_timer, flush_timer,
 		    (unsigned long)gpio_dev);
 
-	rc = devm_gpio_request_one(dev, pdata->gpio_nr, GPIOF_DIR_IN,
+	rc = devm_gpio_request_one(dev, gpio_dev->gpio_nr, GPIOF_DIR_IN,
 					"gpio-ir-recv");
 	if (rc < 0)
 		return rc;
@@ -184,7 +138,7 @@ static int gpio_ir_recv_probe(struct platform_device *pdev)
 
 	platform_set_drvdata(pdev, gpio_dev);
 
-	return devm_request_irq(dev, gpio_to_irq(pdata->gpio_nr),
+	return devm_request_irq(dev, gpio_to_irq(gpio_dev->gpio_nr),
 				gpio_ir_recv_irq,
 				IRQF_TRIGGER_FALLING | IRQF_TRIGGER_RISING,
 				"gpio-ir-recv-irq", gpio_dev);
@@ -231,6 +185,12 @@ static const struct dev_pm_ops gpio_ir_recv_pm_ops = {
 };
 #endif
 
+static const struct of_device_id gpio_ir_recv_of_match[] = {
+	{ .compatible = "gpio-ir-receiver", },
+	{ },
+};
+MODULE_DEVICE_TABLE(of, gpio_ir_recv_of_match);
+
 static struct platform_driver gpio_ir_recv_driver = {
 	.probe  = gpio_ir_recv_probe,
 	.remove = gpio_ir_recv_remove,
diff --git a/include/linux/platform_data/media/gpio-ir-recv.h b/include/linux/platform_data/media/gpio-ir-recv.h
deleted file mode 100644
index 0c298f569d5a..000000000000
--- a/include/linux/platform_data/media/gpio-ir-recv.h
+++ /dev/null
@@ -1,23 +0,0 @@
-/* Copyright (c) 2012, Code Aurora Forum. All rights reserved.
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 and
- * only version 2 as published by the Free Software Foundation.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- */
-
-#ifndef __GPIO_IR_RECV_H__
-#define __GPIO_IR_RECV_H__
-
-struct gpio_ir_recv_platform_data {
-	int		gpio_nr;
-	bool		active_low;
-	u64		allowed_protos;
-	const char	*map_name;
-};
-
-#endif /* __GPIO_IR_RECV_H__ */
-- 
2.11.0

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

* [PATCH 10/10] media: rc: gpio-ir-recv: use gpiolib API
  2017-09-06  8:07 [PATCH 00/10] media: rc: gpio-ir-recv: driver update Ladislav Michl
                   ` (8 preceding siblings ...)
  2017-09-06  8:14 ` [PATCH 09/10] media: rc: gpio-ir-recv: remove gpio_ir_recv_platform_data Ladislav Michl
@ 2017-09-06  8:15 ` Ladislav Michl
  9 siblings, 0 replies; 11+ messages in thread
From: Ladislav Michl @ 2017-09-06  8:15 UTC (permalink / raw)
  To: linux-media; +Cc: Mauro Carvalho Chehab, Sean Young, Andi Shyti

Use of gpiolib API simplifies driver a bit.

Signed-off-by: Ladislav Michl <ladis@linux-mips.org>
---
 drivers/media/rc/Kconfig        |  1 +
 drivers/media/rc/gpio-ir-recv.c | 64 +++++++++++++++++------------------------
 2 files changed, 27 insertions(+), 38 deletions(-)

diff --git a/drivers/media/rc/Kconfig b/drivers/media/rc/Kconfig
index 5e83b76495f7..852bf639f1ca 100644
--- a/drivers/media/rc/Kconfig
+++ b/drivers/media/rc/Kconfig
@@ -382,6 +382,7 @@ config RC_LOOPBACK
 config IR_GPIO_CIR
 	tristate "GPIO IR remote control"
 	depends on RC_CORE
+	depends on (OF && GPIOLIB) || COMPILE_TEST
 	---help---
 	   Say Y if you want to use GPIO based IR Receiver.
 
diff --git a/drivers/media/rc/gpio-ir-recv.c b/drivers/media/rc/gpio-ir-recv.c
index 77498d0c8970..c87f085226f2 100644
--- a/drivers/media/rc/gpio-ir-recv.c
+++ b/drivers/media/rc/gpio-ir-recv.c
@@ -26,39 +26,34 @@
 
 struct gpio_rc_dev {
 	struct rc_dev *rcdev;
-	int gpio_nr;
-	bool active_low;
+	struct gpio_desc *gpiod;
+	int irq;
 	struct timer_list flush_timer;
 };
 
 static irqreturn_t gpio_ir_recv_irq(int irq, void *dev_id)
 {
+	int val;
 	struct gpio_rc_dev *gpio_dev = dev_id;
-	int gval;
-	int rc = 0;
 	enum raw_event_type type = IR_SPACE;
 
-	gval = gpio_get_value(gpio_dev->gpio_nr);
+	val = gpiod_get_value(gpio_dev->gpiod);
+	if (val < 0)
+		goto err;
 
-	if (gval < 0)
-		goto err_get_value;
-
-	if (gpio_dev->active_low)
-		gval = !gval;
-
-	if (gval == 1)
+	if (val)
 		type = IR_PULSE;
 
-	rc = ir_raw_event_store_edge(gpio_dev->rcdev, type);
-	if (rc < 0)
-		goto err_get_value;
+	val = ir_raw_event_store_edge(gpio_dev->rcdev, type);
+	if (val < 0)
+		goto err;
 
 	mod_timer(&gpio_dev->flush_timer,
 		  jiffies + nsecs_to_jiffies(gpio_dev->rcdev->timeout));
 
 	ir_raw_event_handle(gpio_dev->rcdev);
 
-err_get_value:
+err:
 	return IRQ_HANDLED;
 }
 
@@ -76,7 +71,6 @@ static void flush_timer(unsigned long arg)
 static int gpio_ir_recv_probe(struct platform_device *pdev)
 {
 	int rc;
-	enum of_gpio_flags flags;
 	struct rc_dev *rcdev;
 	struct gpio_rc_dev *gpio_dev;
 	struct device *dev = &pdev->dev;
@@ -89,15 +83,17 @@ static int gpio_ir_recv_probe(struct platform_device *pdev)
 	if (!gpio_dev)
 		return -ENOMEM;
 
-	rc = of_get_gpio_flags(np, 0, &flags);
-	if (rc < 0) {
+	gpio_dev->gpiod = devm_gpiod_get(dev, NULL, GPIOD_IN);
+	if (IS_ERR(gpio_dev->gpiod)) {
+		rc = PTR_ERR(gpio_dev->gpiod);
+		/* Just try again if this happens */
 		if (rc != -EPROBE_DEFER)
-			dev_err(dev, "Failed to get gpio flags (%d)\n", rc);
+			dev_err(dev, "error getting gpio (%d)\n", rc);
 		return rc;
 	}
-
-	gpio_dev->gpio_nr = rc;
-	gpio_dev->active_low = (flags & OF_GPIO_ACTIVE_LOW);
+	gpio_dev->irq = gpiod_to_irq(gpio_dev->gpiod);
+	if (gpio_dev->irq < 0)
+		return gpio_dev->irq;
 
 	rcdev = devm_rc_allocate_device(dev, RC_DRIVER_IR_RAW);
 	if (!rcdev)
@@ -125,11 +121,6 @@ static int gpio_ir_recv_probe(struct platform_device *pdev)
 	setup_timer(&gpio_dev->flush_timer, flush_timer,
 		    (unsigned long)gpio_dev);
 
-	rc = devm_gpio_request_one(dev, gpio_dev->gpio_nr, GPIOF_DIR_IN,
-					"gpio-ir-recv");
-	if (rc < 0)
-		return rc;
-
 	rc = devm_rc_register_device(dev, rcdev);
 	if (rc < 0) {
 		dev_err(dev, "failed to register rc device\n");
@@ -138,8 +129,7 @@ static int gpio_ir_recv_probe(struct platform_device *pdev)
 
 	platform_set_drvdata(pdev, gpio_dev);
 
-	return devm_request_irq(dev, gpio_to_irq(gpio_dev->gpio_nr),
-				gpio_ir_recv_irq,
+	return devm_request_irq(dev, gpio_dev->irq, gpio_ir_recv_irq,
 				IRQF_TRIGGER_FALLING | IRQF_TRIGGER_RISING,
 				"gpio-ir-recv-irq", gpio_dev);
 }
@@ -155,26 +145,24 @@ static int gpio_ir_recv_remove(struct platform_device *pdev)
 #ifdef CONFIG_PM
 static int gpio_ir_recv_suspend(struct device *dev)
 {
-	struct platform_device *pdev = to_platform_device(dev);
-	struct gpio_rc_dev *gpio_dev = platform_get_drvdata(pdev);
+	struct gpio_rc_dev *gpio_dev = dev_get_drvdata(dev);
 
 	if (device_may_wakeup(dev))
-		enable_irq_wake(gpio_to_irq(gpio_dev->gpio_nr));
+		enable_irq_wake(gpio_dev->irq);
 	else
-		disable_irq(gpio_to_irq(gpio_dev->gpio_nr));
+		disable_irq(gpio_dev->irq);
 
 	return 0;
 }
 
 static int gpio_ir_recv_resume(struct device *dev)
 {
-	struct platform_device *pdev = to_platform_device(dev);
-	struct gpio_rc_dev *gpio_dev = platform_get_drvdata(pdev);
+	struct gpio_rc_dev *gpio_dev = dev_get_drvdata(dev);
 
 	if (device_may_wakeup(dev))
-		disable_irq_wake(gpio_to_irq(gpio_dev->gpio_nr));
+		disable_irq_wake(gpio_dev->irq);
 	else
-		enable_irq(gpio_to_irq(gpio_dev->gpio_nr));
+		enable_irq(gpio_dev->irq);
 
 	return 0;
 }
-- 
2.11.0

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

end of thread, other threads:[~2017-09-06  8:15 UTC | newest]

Thread overview: 11+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2017-09-06  8:07 [PATCH 00/10] media: rc: gpio-ir-recv: driver update Ladislav Michl
2017-09-06  8:08 ` [PATCH 01/10] media: rc: gpio-ir-recv: use helper vaiable to acess device info Ladislav Michl
2017-09-06  8:09 ` [PATCH 02/10] media: rc: gpio-ir-recv: use devm_kzalloc Ladislav Michl
2017-09-06  8:10 ` [PATCH 03/10] media: rc: gpio-ir-recv: use devm_rc_allocate_device Ladislav Michl
2017-09-06  8:10 ` [PATCH 04/10] media: rc: gpio-ir-recv: use devm_gpio_request_one Ladislav Michl
2017-09-06  8:11 ` [PATCH 05/10] media: rc: gpio-ir-recv: use devm_rc_register_device Ladislav Michl
2017-09-06  8:12 ` [PATCH 06/10] media: rc: gpio-ir-recv: do not allow threaded interrupt handler Ladislav Michl
2017-09-06  8:12 ` [PATCH 07/10] media: rc: gpio-ir-recv: use devm_request_irq Ladislav Michl
2017-09-06  8:13 ` [PATCH 08/10] media: rc: gpio-ir-recv: use KBUILD_MODNAME Ladislav Michl
2017-09-06  8:14 ` [PATCH 09/10] media: rc: gpio-ir-recv: remove gpio_ir_recv_platform_data Ladislav Michl
2017-09-06  8:15 ` [PATCH 10/10] media: rc: gpio-ir-recv: use gpiolib API Ladislav Michl

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).