Commit 601282d6 authored by Hans Verkuil's avatar Hans Verkuil Committed by Mauro Carvalho Chehab

media: pulse8-cec: use adap_free callback

Don't free everything in the disconnect callback, instead use
the adap_free callback, which is called when the last open
filehandle is closed.
Signed-off-by: default avatarHans Verkuil <hverkuil-cisco@xs4all.nl>
Signed-off-by: default avatarMauro Carvalho Chehab <mchehab+huawei@kernel.org>
parent 90687077
...@@ -624,10 +624,23 @@ static int pulse8_cec_adap_transmit(struct cec_adapter *adap, u8 attempts, ...@@ -624,10 +624,23 @@ static int pulse8_cec_adap_transmit(struct cec_adapter *adap, u8 attempts,
return 0; return 0;
} }
static void pulse8_cec_adap_free(struct cec_adapter *adap)
{
struct pulse8 *pulse8 = cec_get_drvdata(adap);
cancel_delayed_work_sync(&pulse8->ping_eeprom_work);
cancel_work_sync(&pulse8->irq_work);
cancel_work_sync(&pulse8->tx_work);
serio_close(pulse8->serio);
serio_set_drvdata(pulse8->serio, NULL);
kfree(pulse8);
}
static const struct cec_adap_ops pulse8_cec_adap_ops = { static const struct cec_adap_ops pulse8_cec_adap_ops = {
.adap_enable = pulse8_cec_adap_enable, .adap_enable = pulse8_cec_adap_enable,
.adap_log_addr = pulse8_cec_adap_log_addr, .adap_log_addr = pulse8_cec_adap_log_addr,
.adap_transmit = pulse8_cec_adap_transmit, .adap_transmit = pulse8_cec_adap_transmit,
.adap_free = pulse8_cec_adap_free,
}; };
static void pulse8_disconnect(struct serio *serio) static void pulse8_disconnect(struct serio *serio)
...@@ -635,13 +648,6 @@ static void pulse8_disconnect(struct serio *serio) ...@@ -635,13 +648,6 @@ static void pulse8_disconnect(struct serio *serio)
struct pulse8 *pulse8 = serio_get_drvdata(serio); struct pulse8 *pulse8 = serio_get_drvdata(serio);
cec_unregister_adapter(pulse8->adap); cec_unregister_adapter(pulse8->adap);
cancel_delayed_work_sync(&pulse8->ping_eeprom_work);
cancel_work_sync(&pulse8->irq_work);
cancel_work_sync(&pulse8->tx_work);
dev_info(&serio->dev, "disconnected\n");
serio_close(serio);
serio_set_drvdata(serio, NULL);
kfree(pulse8);
} }
static int pulse8_setup(struct pulse8 *pulse8, struct serio *serio, static int pulse8_setup(struct pulse8 *pulse8, struct serio *serio,
......
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