From: Mauro Carvalho Chehab Date: Fri, 8 Jul 2016 21:16:10 +0000 (-0300) Subject: Merge branch 'topic/cec' into patchwork X-Git-Url: http://drtracing.org/?a=commitdiff_plain;h=cbb5c8355aaf42e95f1b925bb5ded494dea540d9;p=deliverable%2Flinux.git Merge branch 'topic/cec' into patchwork * topic/cec: [media] DocBook/media: add CEC documentation [media] s5p_cec: get rid of an unused var [media] move s5p-cec to staging [media] vivid: add CEC emulation [media] cec: s5p-cec: Add s5p-cec driver [media] cec: adv7511: add cec support [media] cec: adv7842: add cec support [media] cec: adv7604: add cec support [media] cec: add compat32 ioctl support [media] cec/TODO: add TODO file so we know why this is still in staging [media] cec: add HDMI CEC framework (api) [media] cec: add HDMI CEC framework (adapter) [media] cec: add HDMI CEC framework (core) [media] cec-funcs.h: static inlines to pack/unpack CEC messages [media] cec.h: add cec header [media] cec-edid: add module for EDID CEC helper functions [media] cec.txt: add CEC framework documentation [media] rc: Add HDMI CEC protocol handling --- cbb5c8355aaf42e95f1b925bb5ded494dea540d9 diff --cc drivers/media/i2c/adv7604.c index 0b362eeb55c7,3c9f0014da9c..2d7927150450 --- a/drivers/media/i2c/adv7604.c +++ b/drivers/media/i2c/adv7604.c @@@ -185,9 -187,16 +188,15 @@@ struct adv76xx_state u16 spa_port_a[2]; struct v4l2_fract aspect_ratio; u32 rgb_quantization_range; + struct delayed_work delayed_work_enable_hotplug; + bool restart_stdi_once; ++ /* CEC */ + struct cec_adapter *cec_adap; + u8 cec_addr[ADV76XX_MAX_ADDRS]; + u8 cec_valid_addrs; + bool cec_enabled_adap; + - struct workqueue_struct *work_queues; - struct delayed_work delayed_work_enable_hotplug; - bool restart_stdi_once; - /* i2c clients */ struct i2c_client *i2c_clients[ADV76XX_PAGE_MAX]; @@@ -2152,9 -2333,11 +2357,10 @@@ static int adv76xx_set_edid(struct v4l2 v4l2_err(sd, "error enabling edid (0x%x)\n", state->edid.present); return -EIO; } + cec_s_phys_addr(state->cec_adap, pa, false); /* enable hotplug after 100 ms */ - queue_delayed_work(state->work_queues, - &state->delayed_work_enable_hotplug, HZ / 10); + schedule_delayed_work(&state->delayed_work_enable_hotplug, HZ / 10); return 0; } @@@ -3273,7 -3493,15 +3526,14 @@@ static int adv76xx_remove(struct i2c_cl struct v4l2_subdev *sd = i2c_get_clientdata(client); struct adv76xx_state *state = to_state(sd); + /* disable interrupts */ + io_write(sd, 0x40, 0); + io_write(sd, 0x41, 0); + io_write(sd, 0x46, 0); + io_write(sd, 0x6e, 0); + io_write(sd, 0x73, 0); + cancel_delayed_work(&state->delayed_work_enable_hotplug); - destroy_workqueue(state->work_queues); v4l2_async_unregister_subdev(sd); media_entity_cleanup(&sd->entity); adv76xx_unregister_clients(to_state(sd)); diff --cc drivers/media/i2c/adv7842.c index a45e7537b936,ad7dcfc54e61..100bd3f96b59 --- a/drivers/media/i2c/adv7842.c +++ b/drivers/media/i2c/adv7842.c @@@ -851,9 -850,11 +848,10 @@@ static int edid_write_hdmi_segment(stru (port == ADV7842_EDID_PORT_A) ? 'A' : 'B'); return -EIO; } + cec_s_phys_addr(state->cec_adap, pa, false); /* enable hotplug after 200 ms */ - queue_delayed_work(state->work_queues, - &state->delayed_work_enable_hotplug, HZ / 5); + schedule_delayed_work(&state->delayed_work_enable_hotplug, HZ / 5); return 0; } @@@ -3347,8 -3598,8 +3590,7 @@@ static int adv7842_remove(struct i2c_cl struct adv7842_state *state = to_state(sd); adv7842_irq_enable(sd, false); - cancel_delayed_work(&state->delayed_work_enable_hotplug); - destroy_workqueue(state->work_queues); v4l2_device_unregister_subdev(sd); media_entity_cleanup(&sd->entity); adv7842_unregister_clients(sd);