2
0
mirror of https://github.com/edk2-porting/linux-next.git synced 2024-12-29 15:43:59 +08:00

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: Sean Young <sean@mess.org>
Signed-off-by: Mauro Carvalho Chehab <mchehab@s-opensource.com>
This commit is contained in:
Sean Young 2017-10-17 16:31:20 -04:00 committed by Mauro Carvalho Chehab
parent 50a762b413
commit a6927d81c0

View File

@ -298,6 +298,22 @@ static void ir_work(struct work_struct *work)
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)
@ -441,6 +457,9 @@ static int ir_probe(struct i2c_client *client, const struct i2c_device_id *id)
rc->input_phys = ir->phys;
rc->device_name = name;
rc->dev.parent = &client->dev;
rc->priv = ir;
rc->open = ir_open;
rc->close = ir_close;
/*
* 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)
if (!rc->driver_name)
rc->driver_name = KBUILD_MODNAME;
INIT_DELAYED_WORK(&ir->work, ir_work);
err = rc_register_device(rc);
if (err)
goto err_out_free;
/* start polling via eventd */
INIT_DELAYED_WORK(&ir->work, ir_work);
schedule_delayed_work(&ir->work, 0);
return 0;
err_out_free: