Commit 7f0581b3 authored by Dongjin Kim's avatar Dongjin Kim

media/rc: Add new receiver to specify gpio number for IR sensor

This driver helps to register the device of GPIO based IR receiver, "gpio-ir-recv",
with the gpio number and pulse trigger when driver is loading. For example,

	# modprobe gpio-ir-recv
	# modprobe gpioplug-ir-recv gpio_nr=24 active_low=1

Change-Id: Icc0ac0df04a1b4aa1d55ccfada48f686f6d0f109
Signed-off-by: 's avatarDongjin Kim <tobetter@gmail.com>
parent ee90457b
......@@ -321,4 +321,14 @@ config IR_GPIO_CIR
To compile this driver as a module, choose M here: the module will
be called gpio-ir-recv.
config IR_GPIOPLUG_CIR
tristate "GPIOPLUG IR remote control"
depends on RC_CORE
select IR_GPIO_CIR
---help---
Say Y if you want to use GPIOPLUG based IR Receiver.
To compile this driver as a module, choose M here: the module will
be called gpio-ir-recv.
endif #RC_DEVICES
......@@ -28,5 +28,6 @@ obj-$(CONFIG_IR_STREAMZAP) += streamzap.o
obj-$(CONFIG_IR_WINBOND_CIR) += winbond-cir.o
obj-$(CONFIG_RC_LOOPBACK) += rc-loopback.o
obj-$(CONFIG_IR_GPIO_CIR) += gpio-ir-recv.o
obj-$(CONFIG_IR_GPIOPLUG_CIR) += gpioplug-ir-recv.o
obj-$(CONFIG_IR_IGUANA) += iguanair.o
obj-$(CONFIG_IR_TTUSBIR) += ttusbir.o
......@@ -22,9 +22,6 @@
#include <media/rc-core.h>
#include <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 {
struct rc_dev *rcdev;
int gpio_nr;
......
/*
* Pluggable GPIO IR receiver
*
* Copyright (c) 2015 Dongjin Kim (tobetter@gmail.com)
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation; either version 2 of the License, or
* (at your option) any later version.
*
* 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.
*
* You should have received a copy of the GNU General Public License
* along with this program; if not, write to the Free Software
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
*/
#include <linux/kernel.h>
#include <linux/init.h>
#include <linux/module.h>
#include <linux/gpio.h>
#include <linux/slab.h>
#include <linux/platform_device.h>
#include <media/gpio-ir-recv.h>
static unsigned gpio_nr = -1;
module_param(gpio_nr, uint, 0);
MODULE_PARM_DESC(gpio_nr, "GPIO number to receive IR pulse");
static bool active_low = 0;
module_param(active_low, bool, 0);
MODULE_PARM_DESC(active_low,
"IR pulse trigger level, (1=low active, 0=high active");
static struct platform_device *pdev;
static struct gpio_ir_recv_platform_data *pdata;
static int __init gpio_init(void)
{
int rc = -ENOMEM;
if (gpio_nr == -1) {
pr_err("gpioplug-ir-recv: missing module parameter: 'gpio_nr'\n");
return -EINVAL;
}
pdev = platform_device_alloc(GPIO_IR_DRIVER_NAME, -1);
if (!pdev)
return rc;
pdata = devm_kzalloc(&pdev->dev, sizeof(*pdata), GFP_KERNEL);
if (!pdata)
goto err_free_platform_data;
pdev->dev.platform_data = pdata;
pdata->gpio_nr = gpio_nr;
pdata->active_low = active_low;
pdata->allowed_protos = 0;
pdata->map_name = NULL;
rc = platform_device_add(pdev);
if (rc < 0)
goto err_free_device;
dev_info (&pdev->dev, "IR driver is initialized (gpio=%d, pulse level=%s)\n",
pdata->gpio_nr, pdata->active_low ? "low" : "high");
return 0;
err_free_platform_data:
kfree(pdata);
err_free_device:
platform_device_put(pdev);
return rc;
}
static void __exit gpio_exit(void)
{
dev_info(&pdev->dev, "gpioplug-ir-recv: IR driver is removed\n");
platform_device_unregister(pdev);
}
MODULE_DESCRIPTION("GPIO IR Receiver driver");
MODULE_LICENSE("GPL v2");
module_init(gpio_init);
module_exit(gpio_exit);
......@@ -13,6 +13,9 @@
#ifndef __GPIO_IR_RECV_H__
#define __GPIO_IR_RECV_H__
#define GPIO_IR_DRIVER_NAME "gpio-rc-recv"
#define GPIO_IR_DEVICE_NAME "gpio_ir_recv"
struct gpio_ir_recv_platform_data {
int gpio_nr;
bool active_low;
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment