Re: [PATCH 1/2] platform: Add Amlogic Meson AO CEC Controller driver
On 07/06/2017 12:55 PM, Hans Verkuil wrote: > On 07/06/17 12:27, Neil Armstrong wrote: >> The Amlogic SoC embeds a standalone CEC controller, this patch adds a driver >> for such controller. >> The controller does not need HPD to be active, and could support up to max >> 5 logical addresses, but only 1 is handled since the Suspend firmware can >> make use of this unique logical address to wake up the device. >> >> The Suspend firmware configuration will be added in an other patchset. >> >> Signed-off-by: Neil Armstrong>> --- >> drivers/media/platform/Kconfig| 11 + >> drivers/media/platform/Makefile | 2 + >> drivers/media/platform/meson/Makefile | 1 + >> drivers/media/platform/meson/ao-cec.c | 653 >> ++ >> 4 files changed, 667 insertions(+) >> create mode 100644 drivers/media/platform/meson/Makefile >> create mode 100644 drivers/media/platform/meson/ao-cec.c >> >> diff --git a/drivers/media/platform/Kconfig b/drivers/media/platform/Kconfig >> index 1313cd5..1e67381 100644 >> --- a/drivers/media/platform/Kconfig >> +++ b/drivers/media/platform/Kconfig >> @@ -536,6 +536,17 @@ menuconfig CEC_PLATFORM_DRIVERS >> >> if CEC_PLATFORM_DRIVERS >> >> +config VIDEO_MESON_AO_CEC >> +tristate "Amlogic Meson AO CEC driver" >> +depends on ARCH_MESON || COMPILE_TEST >> +select CEC_CORE >> +select CEC_NOTIFIER >> +---help--- >> + This is a driver for Amlogic Meson SoCs AO CEC interface. It uses the >> + generic CEC framework interface. >> + CEC bus is present in the HDMI connector and enables communication >> + between compatible devices. >> + >> config VIDEO_SAMSUNG_S5P_CEC >> tristate "Samsung S5P CEC driver" >> depends on PLAT_S5P || ARCH_EXYNOS || COMPILE_TEST >> diff --git a/drivers/media/platform/Makefile >> b/drivers/media/platform/Makefile >> index 9beadc7..a52d7b6 100644 >> --- a/drivers/media/platform/Makefile >> +++ b/drivers/media/platform/Makefile >> @@ -86,3 +86,5 @@ obj-$(CONFIG_VIDEO_MEDIATEK_MDP) += mtk-mdp/ >> obj-$(CONFIG_VIDEO_MEDIATEK_JPEG) += mtk-jpeg/ >> >> obj-$(CONFIG_VIDEO_QCOM_VENUS) += qcom/venus/ >> + >> +obj-y += meson/ >> diff --git a/drivers/media/platform/meson/Makefile >> b/drivers/media/platform/meson/Makefile >> new file mode 100644 >> index 000..597beb8 >> --- /dev/null >> +++ b/drivers/media/platform/meson/Makefile >> @@ -0,0 +1 @@ >> +obj-$(CONFIG_VIDEO_MESON_AO_CEC)+= ao-cec.o >> diff --git a/drivers/media/platform/meson/ao-cec.c >> b/drivers/media/platform/meson/ao-cec.c >> new file mode 100644 >> index 000..26d7c3e8 >> --- /dev/null >> +++ b/drivers/media/platform/meson/ao-cec.c >> @@ -0,0 +1,653 @@ >> +/* >> + * Driver for Amlogic Meson AO CEC Controller >> + * >> + * Copyright (C) 2015 Amlogic, Inc. All rights reserved >> + * Copyright (C) 2017 BayLibre, SAS >> + * Author: Neil Armstrong >> + * >> + * SPDX-License-Identifier: GPL-2.0+ >> + */ >> + >> +#include >> +#include >> +#include >> +#include >> +#include >> +#include >> +#include >> +#include >> +#include >> +#include >> +#include >> +#include >> +#include >> +#include >> +#include >> + >> +/* CEC Registers */ >> + >> +/* >> + * [2:1] cntl_clk >> + * - 0 = Disable clk (Power-off mode) >> + * - 1 = Enable gated clock (Normal mode) >> + * - 2 = Enable free-run clk (Debug mode) >> + */ >> +#define CEC_GEN_CNTL_REG0x00 >> + >> +#define CEC_GEN_CNTL_RESET BIT(0) >> +#define CEC_GEN_CNTL_CLK_DISABLE0 >> +#define CEC_GEN_CNTL_CLK_ENABLE 1 >> +#define CEC_GEN_CNTL_CLK_ENABLE_DBG 2 >> +#define CEC_GEN_CNTL_CLK_CTRL_MASK GENMASK(2, 1) >> + >> +/* >> + * [7:0] cec_reg_addr >> + * [15:8] cec_reg_wrdata >> + * [16] cec_reg_wr >> + * - 0 = Read >> + * - 1 = Write >> + * [23] bus free >> + * [31:24] cec_reg_rddata >> + */ >> +#define CEC_RW_REG 0x04 >> + >> +#define CEC_RW_ADDR GENMASK(7, 0) >> +#define CEC_RW_WR_DATA GENMASK(15, 8) >> +#define CEC_RW_WRITE_EN BIT(16) >> +#define CEC_RW_BUS_BUSY BIT(23) >> +#define CEC_RW_RD_DATA GENMASK(31, 24) >> + >> +/* >> + * [1] tx intr >> + * [2] rx intr >> + */ >> +#define CEC_INTR_MASKN_REG 0x08 >> +#define CEC_INTR_CLR_REG0x0c >> +#define CEC_INTR_STAT_REG 0x10 >> + >> +#define CEC_INTR_TX BIT(1) >> +#define CEC_INTR_RX BIT(2) >> + >> +/* CEC Commands */ >> + >> +#define CEC_TX_MSG_0_HEADER 0x00 >> +#define CEC_TX_MSG_1_OPCODE 0x01 >> +#define CEC_TX_MSG_2_OP10x02 >> +#define CEC_TX_MSG_3_OP20x03 >> +#define CEC_TX_MSG_4_OP30x04 >> +#define CEC_TX_MSG_5_OP40x05 >> +#define CEC_TX_MSG_6_OP50x06 >> +#define CEC_TX_MSG_7_OP60x07 >>
Re: [PATCH 1/2] platform: Add Amlogic Meson AO CEC Controller driver
On 07/06/17 12:27, Neil Armstrong wrote: > The Amlogic SoC embeds a standalone CEC controller, this patch adds a driver > for such controller. > The controller does not need HPD to be active, and could support up to max > 5 logical addresses, but only 1 is handled since the Suspend firmware can > make use of this unique logical address to wake up the device. > > The Suspend firmware configuration will be added in an other patchset. > > Signed-off-by: Neil Armstrong> --- > drivers/media/platform/Kconfig| 11 + > drivers/media/platform/Makefile | 2 + > drivers/media/platform/meson/Makefile | 1 + > drivers/media/platform/meson/ao-cec.c | 653 > ++ > 4 files changed, 667 insertions(+) > create mode 100644 drivers/media/platform/meson/Makefile > create mode 100644 drivers/media/platform/meson/ao-cec.c > > diff --git a/drivers/media/platform/Kconfig b/drivers/media/platform/Kconfig > index 1313cd5..1e67381 100644 > --- a/drivers/media/platform/Kconfig > +++ b/drivers/media/platform/Kconfig > @@ -536,6 +536,17 @@ menuconfig CEC_PLATFORM_DRIVERS > > if CEC_PLATFORM_DRIVERS > > +config VIDEO_MESON_AO_CEC > + tristate "Amlogic Meson AO CEC driver" > + depends on ARCH_MESON || COMPILE_TEST > + select CEC_CORE > + select CEC_NOTIFIER > + ---help--- > + This is a driver for Amlogic Meson SoCs AO CEC interface. It uses the > + generic CEC framework interface. > + CEC bus is present in the HDMI connector and enables communication > + between compatible devices. > + > config VIDEO_SAMSUNG_S5P_CEC > tristate "Samsung S5P CEC driver" > depends on PLAT_S5P || ARCH_EXYNOS || COMPILE_TEST > diff --git a/drivers/media/platform/Makefile b/drivers/media/platform/Makefile > index 9beadc7..a52d7b6 100644 > --- a/drivers/media/platform/Makefile > +++ b/drivers/media/platform/Makefile > @@ -86,3 +86,5 @@ obj-$(CONFIG_VIDEO_MEDIATEK_MDP)+= mtk-mdp/ > obj-$(CONFIG_VIDEO_MEDIATEK_JPEG)+= mtk-jpeg/ > > obj-$(CONFIG_VIDEO_QCOM_VENUS) += qcom/venus/ > + > +obj-y+= meson/ > diff --git a/drivers/media/platform/meson/Makefile > b/drivers/media/platform/meson/Makefile > new file mode 100644 > index 000..597beb8 > --- /dev/null > +++ b/drivers/media/platform/meson/Makefile > @@ -0,0 +1 @@ > +obj-$(CONFIG_VIDEO_MESON_AO_CEC) += ao-cec.o > diff --git a/drivers/media/platform/meson/ao-cec.c > b/drivers/media/platform/meson/ao-cec.c > new file mode 100644 > index 000..26d7c3e8 > --- /dev/null > +++ b/drivers/media/platform/meson/ao-cec.c > @@ -0,0 +1,653 @@ > +/* > + * Driver for Amlogic Meson AO CEC Controller > + * > + * Copyright (C) 2015 Amlogic, Inc. All rights reserved > + * Copyright (C) 2017 BayLibre, SAS > + * Author: Neil Armstrong > + * > + * SPDX-License-Identifier: GPL-2.0+ > + */ > + > +#include > +#include > +#include > +#include > +#include > +#include > +#include > +#include > +#include > +#include > +#include > +#include > +#include > +#include > +#include > + > +/* CEC Registers */ > + > +/* > + * [2:1] cntl_clk > + * - 0 = Disable clk (Power-off mode) > + * - 1 = Enable gated clock (Normal mode) > + * - 2 = Enable free-run clk (Debug mode) > + */ > +#define CEC_GEN_CNTL_REG 0x00 > + > +#define CEC_GEN_CNTL_RESET BIT(0) > +#define CEC_GEN_CNTL_CLK_DISABLE 0 > +#define CEC_GEN_CNTL_CLK_ENABLE 1 > +#define CEC_GEN_CNTL_CLK_ENABLE_DBG 2 > +#define CEC_GEN_CNTL_CLK_CTRL_MASK GENMASK(2, 1) > + > +/* > + * [7:0] cec_reg_addr > + * [15:8] cec_reg_wrdata > + * [16] cec_reg_wr > + * - 0 = Read > + * - 1 = Write > + * [23] bus free > + * [31:24] cec_reg_rddata > + */ > +#define CEC_RW_REG 0x04 > + > +#define CEC_RW_ADDR GENMASK(7, 0) > +#define CEC_RW_WR_DATA GENMASK(15, 8) > +#define CEC_RW_WRITE_EN BIT(16) > +#define CEC_RW_BUS_BUSY BIT(23) > +#define CEC_RW_RD_DATA GENMASK(31, 24) > + > +/* > + * [1] tx intr > + * [2] rx intr > + */ > +#define CEC_INTR_MASKN_REG 0x08 > +#define CEC_INTR_CLR_REG 0x0c > +#define CEC_INTR_STAT_REG0x10 > + > +#define CEC_INTR_TX BIT(1) > +#define CEC_INTR_RX BIT(2) > + > +/* CEC Commands */ > + > +#define CEC_TX_MSG_0_HEADER 0x00 > +#define CEC_TX_MSG_1_OPCODE 0x01 > +#define CEC_TX_MSG_2_OP1 0x02 > +#define CEC_TX_MSG_3_OP2 0x03 > +#define CEC_TX_MSG_4_OP3 0x04 > +#define CEC_TX_MSG_5_OP4 0x05 > +#define CEC_TX_MSG_6_OP5 0x06 > +#define CEC_TX_MSG_7_OP6 0x07 > +#define CEC_TX_MSG_8_OP7 0x08 > +#define CEC_TX_MSG_9_OP8 0x09 > +#define CEC_TX_MSG_A_OP9 0x0A > +#define
[PATCH 1/2] platform: Add Amlogic Meson AO CEC Controller driver
The Amlogic SoC embeds a standalone CEC controller, this patch adds a driver for such controller. The controller does not need HPD to be active, and could support up to max 5 logical addresses, but only 1 is handled since the Suspend firmware can make use of this unique logical address to wake up the device. The Suspend firmware configuration will be added in an other patchset. Signed-off-by: Neil Armstrong--- drivers/media/platform/Kconfig| 11 + drivers/media/platform/Makefile | 2 + drivers/media/platform/meson/Makefile | 1 + drivers/media/platform/meson/ao-cec.c | 653 ++ 4 files changed, 667 insertions(+) create mode 100644 drivers/media/platform/meson/Makefile create mode 100644 drivers/media/platform/meson/ao-cec.c diff --git a/drivers/media/platform/Kconfig b/drivers/media/platform/Kconfig index 1313cd5..1e67381 100644 --- a/drivers/media/platform/Kconfig +++ b/drivers/media/platform/Kconfig @@ -536,6 +536,17 @@ menuconfig CEC_PLATFORM_DRIVERS if CEC_PLATFORM_DRIVERS +config VIDEO_MESON_AO_CEC + tristate "Amlogic Meson AO CEC driver" + depends on ARCH_MESON || COMPILE_TEST + select CEC_CORE + select CEC_NOTIFIER + ---help--- + This is a driver for Amlogic Meson SoCs AO CEC interface. It uses the + generic CEC framework interface. + CEC bus is present in the HDMI connector and enables communication + between compatible devices. + config VIDEO_SAMSUNG_S5P_CEC tristate "Samsung S5P CEC driver" depends on PLAT_S5P || ARCH_EXYNOS || COMPILE_TEST diff --git a/drivers/media/platform/Makefile b/drivers/media/platform/Makefile index 9beadc7..a52d7b6 100644 --- a/drivers/media/platform/Makefile +++ b/drivers/media/platform/Makefile @@ -86,3 +86,5 @@ obj-$(CONFIG_VIDEO_MEDIATEK_MDP) += mtk-mdp/ obj-$(CONFIG_VIDEO_MEDIATEK_JPEG) += mtk-jpeg/ obj-$(CONFIG_VIDEO_QCOM_VENUS) += qcom/venus/ + +obj-y += meson/ diff --git a/drivers/media/platform/meson/Makefile b/drivers/media/platform/meson/Makefile new file mode 100644 index 000..597beb8 --- /dev/null +++ b/drivers/media/platform/meson/Makefile @@ -0,0 +1 @@ +obj-$(CONFIG_VIDEO_MESON_AO_CEC) += ao-cec.o diff --git a/drivers/media/platform/meson/ao-cec.c b/drivers/media/platform/meson/ao-cec.c new file mode 100644 index 000..26d7c3e8 --- /dev/null +++ b/drivers/media/platform/meson/ao-cec.c @@ -0,0 +1,653 @@ +/* + * Driver for Amlogic Meson AO CEC Controller + * + * Copyright (C) 2015 Amlogic, Inc. All rights reserved + * Copyright (C) 2017 BayLibre, SAS + * Author: Neil Armstrong + * + * SPDX-License-Identifier: GPL-2.0+ + */ + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +/* CEC Registers */ + +/* + * [2:1] cntl_clk + * - 0 = Disable clk (Power-off mode) + * - 1 = Enable gated clock (Normal mode) + * - 2 = Enable free-run clk (Debug mode) + */ +#define CEC_GEN_CNTL_REG 0x00 + +#define CEC_GEN_CNTL_RESET BIT(0) +#define CEC_GEN_CNTL_CLK_DISABLE 0 +#define CEC_GEN_CNTL_CLK_ENABLE1 +#define CEC_GEN_CNTL_CLK_ENABLE_DBG2 +#define CEC_GEN_CNTL_CLK_CTRL_MASK GENMASK(2, 1) + +/* + * [7:0] cec_reg_addr + * [15:8] cec_reg_wrdata + * [16] cec_reg_wr + * - 0 = Read + * - 1 = Write + * [23] bus free + * [31:24] cec_reg_rddata + */ +#define CEC_RW_REG 0x04 + +#define CEC_RW_ADDRGENMASK(7, 0) +#define CEC_RW_WR_DATA GENMASK(15, 8) +#define CEC_RW_WRITE_ENBIT(16) +#define CEC_RW_BUS_BUSYBIT(23) +#define CEC_RW_RD_DATA GENMASK(31, 24) + +/* + * [1] tx intr + * [2] rx intr + */ +#define CEC_INTR_MASKN_REG 0x08 +#define CEC_INTR_CLR_REG 0x0c +#define CEC_INTR_STAT_REG 0x10 + +#define CEC_INTR_TXBIT(1) +#define CEC_INTR_RXBIT(2) + +/* CEC Commands */ + +#define CEC_TX_MSG_0_HEADER0x00 +#define CEC_TX_MSG_1_OPCODE0x01 +#define CEC_TX_MSG_2_OP1 0x02 +#define CEC_TX_MSG_3_OP2 0x03 +#define CEC_TX_MSG_4_OP3 0x04 +#define CEC_TX_MSG_5_OP4 0x05 +#define CEC_TX_MSG_6_OP5 0x06 +#define CEC_TX_MSG_7_OP6 0x07 +#define CEC_TX_MSG_8_OP7 0x08 +#define CEC_TX_MSG_9_OP8 0x09 +#define CEC_TX_MSG_A_OP9 0x0A +#define CEC_TX_MSG_B_OP10 0x0B +#define CEC_TX_MSG_C_OP11 0x0C +#define CEC_TX_MSG_D_OP12 0x0D +#define CEC_TX_MSG_E_OP13 0x0E +#define CEC_TX_MSG_F_OP14 0x0F +#define CEC_TX_MSG_LENGTH 0x10 +#define CEC_TX_MSG_CMD 0x11