On Fri, Jun 02, 2017 at 11:06:24AM +0200, Hans Verkuil wrote: > On 06/02/17 08:43, Jose Abreu wrote: > > Hi Hans, > > > > > > On 02-06-2017 07:31, Hans Verkuil wrote: > >> On 06/01/2017 03:47 PM, Neil Armstrong wrote: > >>> On 05/30/2017 04:23 PM, Russell King wrote: > >>>> Add a CEC driver for the dw-hdmi hardware. > >>>> > >>>> Signed-off-by: Russell King <rmk+kernel@xxxxxxxxxxxxxxx> > >>>> --- > >>>> drivers/gpu/drm/bridge/synopsys/Kconfig | 8 + > >>>> drivers/gpu/drm/bridge/synopsys/Makefile | 1 + > >>>> drivers/gpu/drm/bridge/synopsys/dw-hdmi-cec.c | 320 > >>>> ++++++++++++++++++++++++++ > >>>> drivers/gpu/drm/bridge/synopsys/dw-hdmi-cec.h | 19 ++ > >>>> drivers/gpu/drm/bridge/synopsys/dw-hdmi.c | 40 +++- > >>>> 5 files changed, 387 insertions(+), 1 deletion(-) > >>>> create mode 100644 > >>>> drivers/gpu/drm/bridge/synopsys/dw-hdmi-cec.c > >>>> create mode 100644 > >>>> drivers/gpu/drm/bridge/synopsys/dw-hdmi-cec.h > >>>> > >>>> diff --git a/drivers/gpu/drm/bridge/synopsys/Kconfig > >>>> b/drivers/gpu/drm/bridge/synopsys/Kconfig > >>>> index 40d2827a6d19..bd30a0a07272 100644 > >>>> --- a/drivers/gpu/drm/bridge/synopsys/Kconfig > >>>> +++ b/drivers/gpu/drm/bridge/synopsys/Kconfig > >>>> @@ -21,3 +21,11 @@ config DRM_DW_HDMI_I2S_AUDIO > >>>> help > >>>> Support the I2S Audio interface which is part of the > >>>> Synopsys > >>>> Designware HDMI block. > >>>> + > >>>> +config DRM_DW_HDMI_CEC > >>>> + tristate "Synopsis Designware CEC interface" > >>>> + depends on DRM_DW_HDMI && MEDIA_CEC_SUPPORT > >>>> + select MEDIA_CEC_NOTIFIER > >>>> + help > >>>> + Support the CE interface which is part of the Synopsis > >>>> + Designware HDMI block. > >>>> diff --git a/drivers/gpu/drm/bridge/synopsys/Makefile > >>>> b/drivers/gpu/drm/bridge/synopsys/Makefile > >>>> index 17aa7a65b57e..6fe415903668 100644 > >>>> --- a/drivers/gpu/drm/bridge/synopsys/Makefile > >>>> +++ b/drivers/gpu/drm/bridge/synopsys/Makefile > >>>> @@ -3,3 +3,4 @@ > >>>> obj-$(CONFIG_DRM_DW_HDMI) += dw-hdmi.o > >>>> obj-$(CONFIG_DRM_DW_HDMI_AHB_AUDIO) += dw-hdmi-ahb-audio.o > >>>> obj-$(CONFIG_DRM_DW_HDMI_I2S_AUDIO) += dw-hdmi-i2s-audio.o > >>>> +obj-$(CONFIG_DRM_DW_HDMI_CEC) += dw-hdmi-cec.o > >>>> diff --git a/drivers/gpu/drm/bridge/synopsys/dw-hdmi-cec.c > >>>> b/drivers/gpu/drm/bridge/synopsys/dw-hdmi-cec.c > >>>> new file mode 100644 > >>>> index 000000000000..761ef5ae687d > >>>> --- /dev/null > >>>> +++ b/drivers/gpu/drm/bridge/synopsys/dw-hdmi-cec.c > >>>> @@ -0,0 +1,320 @@ > >>>> +/* > >>>> + * Designware HDMI CEC driver > >>>> + * > >>>> + * Copyright (C) 2015-2017 Russell King. > >>>> + * > >>>> + * This program is free software; you can redistribute it > >>>> and/or modify > >>>> + * it under the terms of the GNU General Public License > >>>> version 2 as > >>>> + * published by the Free Software Foundation. > >>>> + */ > >>>> +#include <linux/interrupt.h> > >>>> +#include <linux/io.h> > >>>> +#include <linux/module.h> > >>>> +#include <linux/platform_device.h> > >>>> +#include <linux/sched.h> > >>>> +#include <linux/slab.h> > >>>> + > >>>> +#include <drm/drm_edid.h> > >>>> + > >>>> +#include <media/cec.h> > >>>> +#include <media/cec-notifier.h> > >>>> + > >>>> +#include "dw-hdmi-cec.h" > >>>> + > >>>> +enum { > >>>> + HDMI_IH_CEC_STAT0 = 0x0106, > >>>> + HDMI_IH_MUTE_CEC_STAT0 = 0x0186, > >>>> + > >>>> + HDMI_CEC_CTRL = 0x7d00, > >>>> + CEC_CTRL_START = BIT(0), > >>>> + CEC_CTRL_NORMAL = 1 << 1, > >>>> + > >>>> + HDMI_CEC_STAT = 0x7d01, > >>>> + CEC_STAT_DONE = BIT(0), > >>>> + CEC_STAT_EOM = BIT(1), > >>>> + CEC_STAT_NACK = BIT(2), > >>>> + CEC_STAT_ARBLOST = BIT(3), > >>>> + CEC_STAT_ERROR_INIT = BIT(4), > >>>> + CEC_STAT_ERROR_FOLL = BIT(5), > >>>> + CEC_STAT_WAKEUP = BIT(6), > >> > >> I hadn't realized until Jose Abreu's latest reply, but you need > >> to check the > >> ARBLOST status and set the TX state to CEC_TX_STATUS_ARB_LOST. > >> > >> I think CEC_STAT_ERROR_FOLL might equal > >> CEC_TX_STATUS_LOW_DRIVE, but without > >> documentation I can't be sure. > >> > >> My experience is that this low drive condition tends to be > >> poorly reported by > >> hardware. Either that or poorly documented. This is why I added a > >> CEC_TX_STATUS_ERROR status as a catch-all error status when it > >> is unclear from > >> the hardware/documentation what error occurred. > >> > >> Jose, do you know which status bit is used to report a follower > >> pulling the > >> CEC line low for a long time (approx. 3.6 ms) to signal a CEC > >> error? > > > > Bit 5 for follower error, bit 4 for initiator error. > > I gathered that from the define names :-) > > But what does it mean? What sort of error is reported here? I think the problem is that no one really knows, the documentation is quite poor: 5 An error is notified by a follower. Abnormal logic data ERROR_FOLL bit error (for follower). 4 An error is detected on cec line (for initiator only). ERROR_INIT It is so vague that you can read anything into that description. -- RMK's Patch system: http://www.armlinux.org.uk/developer/patches/ FTTC broadband for 0.8mile line: currently at 9.6Mbps down 400kbps up according to speedtest.net. _______________________________________________ dri-devel mailing list dri-devel@xxxxxxxxxxxxxxxxxxxxx https://lists.freedesktop.org/mailman/listinfo/dri-devel