Commit a6927d81 authored by Sean Young's avatar Sean Young Committed by Mauro Carvalho Chehab

media: rc: i2c: only poll if the rc device is opened

The lirc_zilog driver only polls the device if the lirc chardev
is opened; do the same with the rc-core driver.
Signed-off-by: default avatarSean Young <sean@mess.org>
Signed-off-by: default avatarMauro Carvalho Chehab <mchehab@s-opensource.com>
parent 50a762b4
...@@ -298,6 +298,22 @@ static void ir_work(struct work_struct *work) ...@@ -298,6 +298,22 @@ static void ir_work(struct work_struct *work)
schedule_delayed_work(&ir->work, msecs_to_jiffies(ir->polling_interval)); schedule_delayed_work(&ir->work, msecs_to_jiffies(ir->polling_interval));
} }
static int ir_open(struct rc_dev *dev)
{
struct IR_i2c *ir = dev->priv;
schedule_delayed_work(&ir->work, 0);
return 0;
}
static void ir_close(struct rc_dev *dev)
{
struct IR_i2c *ir = dev->priv;
cancel_delayed_work_sync(&ir->work);
}
/* ----------------------------------------------------------------------- */ /* ----------------------------------------------------------------------- */
static int ir_probe(struct i2c_client *client, const struct i2c_device_id *id) static int ir_probe(struct i2c_client *client, const struct i2c_device_id *id)
...@@ -441,6 +457,9 @@ static int ir_probe(struct i2c_client *client, const struct i2c_device_id *id) ...@@ -441,6 +457,9 @@ static int ir_probe(struct i2c_client *client, const struct i2c_device_id *id)
rc->input_phys = ir->phys; rc->input_phys = ir->phys;
rc->device_name = name; rc->device_name = name;
rc->dev.parent = &client->dev; rc->dev.parent = &client->dev;
rc->priv = ir;
rc->open = ir_open;
rc->close = ir_close;
/* /*
* Initialize the other fields of rc_dev * Initialize the other fields of rc_dev
...@@ -450,14 +469,12 @@ static int ir_probe(struct i2c_client *client, const struct i2c_device_id *id) ...@@ -450,14 +469,12 @@ static int ir_probe(struct i2c_client *client, const struct i2c_device_id *id)
if (!rc->driver_name) if (!rc->driver_name)
rc->driver_name = KBUILD_MODNAME; rc->driver_name = KBUILD_MODNAME;
INIT_DELAYED_WORK(&ir->work, ir_work);
err = rc_register_device(rc); err = rc_register_device(rc);
if (err) if (err)
goto err_out_free; goto err_out_free;
/* start polling via eventd */
INIT_DELAYED_WORK(&ir->work, ir_work);
schedule_delayed_work(&ir->work, 0);
return 0; return 0;
err_out_free: err_out_free:
......
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