Skip to content

Commit

Permalink
media: pulse8-cec: use adap_free callback
Browse files Browse the repository at this point in the history
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: Hans Verkuil <hverkuil-cisco@xs4all.nl>
Signed-off-by: Mauro Carvalho Chehab <mchehab+huawei@kernel.org>
  • Loading branch information
Hans Verkuil authored and Mauro Carvalho Chehab committed Dec 16, 2019
1 parent 9068707 commit 601282d
Showing 1 changed file with 13 additions and 7 deletions.
20 changes: 13 additions & 7 deletions drivers/media/usb/pulse8-cec/pulse8-cec.c
Original file line number Diff line number Diff line change
Expand Up @@ -624,24 +624,30 @@ static int pulse8_cec_adap_transmit(struct cec_adapter *adap, u8 attempts,
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 = {
.adap_enable = pulse8_cec_adap_enable,
.adap_log_addr = pulse8_cec_adap_log_addr,
.adap_transmit = pulse8_cec_adap_transmit,
.adap_free = pulse8_cec_adap_free,
};

static void pulse8_disconnect(struct serio *serio)
{
struct pulse8 *pulse8 = serio_get_drvdata(serio);

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,
Expand Down

0 comments on commit 601282d

Please sign in to comment.