From 563845b4741e62579bfcdabd974219bad416c985 Mon Sep 17 00:00:00 2001 From: Luo Wei Date: Tue, 25 Jul 2023 19:14:23 +0800 Subject: [PATCH] mfd: display-serdes: add serdes display driver support base on mfd arch * i2c register initialization with dts sequence from serdes chip vendor. * pinctrl and gpio interface to operate the different serdes chips. * bridge interface to transmit data for different ser chips. * panel interface to drive lcds for different des chips. * one ser chip to connect two des chips in order to costdown. * support different serdes display chip such as maxim, rohm and rockchip. Signed-off-by: Luo Wei Change-Id: Ic8f3558b8ea8ee3d5297bdf2551308e82925304a --- drivers/mfd/Kconfig | 1 + drivers/mfd/Makefile | 1 + drivers/mfd/display-serdes/Kconfig | 31 + drivers/mfd/display-serdes/Makefile | 13 + drivers/mfd/display-serdes/core.h | 353 ++++++++ drivers/mfd/display-serdes/gpio.h | 248 ++++++ drivers/mfd/display-serdes/maxim/Kconfig | 44 + drivers/mfd/display-serdes/maxim/Makefile | 9 + .../mfd/display-serdes/maxim/maxim-max96745.c | 781 ++++++++++++++++++ .../mfd/display-serdes/maxim/maxim-max96745.h | 139 ++++ .../mfd/display-serdes/maxim/maxim-max96752.c | 319 +++++++ .../mfd/display-serdes/maxim/maxim-max96752.h | 14 + .../mfd/display-serdes/maxim/maxim-max96755.c | 719 ++++++++++++++++ .../mfd/display-serdes/maxim/maxim-max96755.h | 189 +++++ .../mfd/display-serdes/maxim/maxim-max96772.c | 328 ++++++++ .../mfd/display-serdes/maxim/maxim-max96772.h | 14 + .../mfd/display-serdes/maxim/maxim-max96789.c | 352 ++++++++ .../mfd/display-serdes/maxim/maxim-max96789.h | 14 + drivers/mfd/display-serdes/novo/Kconfig | 20 + drivers/mfd/display-serdes/novo/Makefile | 6 + .../mfd/display-serdes/novo/novo-nca9539.c | 370 +++++++++ drivers/mfd/display-serdes/rockchip/Kconfig | 25 + drivers/mfd/display-serdes/rockchip/Makefile | 6 + .../display-serdes/rockchip/rockchip-rkx111.c | 189 +++++ .../display-serdes/rockchip/rockchip-rkx121.c | 189 +++++ drivers/mfd/display-serdes/rohm/Kconfig | 25 + drivers/mfd/display-serdes/rohm/Makefile | 6 + .../mfd/display-serdes/rohm/rohm-bu18rl82.c | 460 +++++++++++ .../mfd/display-serdes/rohm/rohm-bu18rl82.h | 376 +++++++++ .../mfd/display-serdes/rohm/rohm-bu18tl82.c | 461 +++++++++++ .../mfd/display-serdes/rohm/rohm-bu18tl82.h | 438 ++++++++++ drivers/mfd/display-serdes/serdes-bridge.c | 354 ++++++++ drivers/mfd/display-serdes/serdes-core.c | 391 +++++++++ drivers/mfd/display-serdes/serdes-gpio.c | 253 ++++++ drivers/mfd/display-serdes/serdes-i2c.c | 337 ++++++++ drivers/mfd/display-serdes/serdes-irq.c | 109 +++ drivers/mfd/display-serdes/serdes-panel.c | 246 ++++++ drivers/mfd/display-serdes/serdes-pinctrl.c | 393 +++++++++ 38 files changed, 8223 insertions(+) create mode 100644 drivers/mfd/display-serdes/Kconfig create mode 100644 drivers/mfd/display-serdes/Makefile create mode 100644 drivers/mfd/display-serdes/core.h create mode 100644 drivers/mfd/display-serdes/gpio.h create mode 100644 drivers/mfd/display-serdes/maxim/Kconfig create mode 100644 drivers/mfd/display-serdes/maxim/Makefile create mode 100644 drivers/mfd/display-serdes/maxim/maxim-max96745.c create mode 100644 drivers/mfd/display-serdes/maxim/maxim-max96745.h create mode 100644 drivers/mfd/display-serdes/maxim/maxim-max96752.c create mode 100644 drivers/mfd/display-serdes/maxim/maxim-max96752.h create mode 100644 drivers/mfd/display-serdes/maxim/maxim-max96755.c create mode 100644 drivers/mfd/display-serdes/maxim/maxim-max96755.h create mode 100644 drivers/mfd/display-serdes/maxim/maxim-max96772.c create mode 100644 drivers/mfd/display-serdes/maxim/maxim-max96772.h create mode 100644 drivers/mfd/display-serdes/maxim/maxim-max96789.c create mode 100644 drivers/mfd/display-serdes/maxim/maxim-max96789.h create mode 100644 drivers/mfd/display-serdes/novo/Kconfig create mode 100644 drivers/mfd/display-serdes/novo/Makefile create mode 100644 drivers/mfd/display-serdes/novo/novo-nca9539.c create mode 100644 drivers/mfd/display-serdes/rockchip/Kconfig create mode 100644 drivers/mfd/display-serdes/rockchip/Makefile create mode 100644 drivers/mfd/display-serdes/rockchip/rockchip-rkx111.c create mode 100644 drivers/mfd/display-serdes/rockchip/rockchip-rkx121.c create mode 100644 drivers/mfd/display-serdes/rohm/Kconfig create mode 100644 drivers/mfd/display-serdes/rohm/Makefile create mode 100644 drivers/mfd/display-serdes/rohm/rohm-bu18rl82.c create mode 100644 drivers/mfd/display-serdes/rohm/rohm-bu18rl82.h create mode 100644 drivers/mfd/display-serdes/rohm/rohm-bu18tl82.c create mode 100644 drivers/mfd/display-serdes/rohm/rohm-bu18tl82.h create mode 100644 drivers/mfd/display-serdes/serdes-bridge.c create mode 100644 drivers/mfd/display-serdes/serdes-core.c create mode 100644 drivers/mfd/display-serdes/serdes-gpio.c create mode 100644 drivers/mfd/display-serdes/serdes-i2c.c create mode 100644 drivers/mfd/display-serdes/serdes-irq.c create mode 100644 drivers/mfd/display-serdes/serdes-panel.c create mode 100644 drivers/mfd/display-serdes/serdes-pinctrl.c diff --git a/drivers/mfd/Kconfig b/drivers/mfd/Kconfig index d90b49d50531..aa1fe3bcf7f6 100644 --- a/drivers/mfd/Kconfig +++ b/drivers/mfd/Kconfig @@ -1218,6 +1218,7 @@ config MFD_RK1000 if you say yes here you get support for the RK1000, with func as TVEncoder or CODEC. +source "drivers/mfd/display-serdes/Kconfig" source "drivers/mfd/rkx110_x120/Kconfig" config MFD_RN5T618 diff --git a/drivers/mfd/Makefile b/drivers/mfd/Makefile index 70ec822acfeb..17c722019f32 100644 --- a/drivers/mfd/Makefile +++ b/drivers/mfd/Makefile @@ -230,6 +230,7 @@ obj-$(CONFIG_MFD_RK806) += rk806-core.o obj-$(CONFIG_MFD_RK806_SPI) += rk806-spi.o obj-$(CONFIG_MFD_RK808) += rk808.o obj-$(CONFIG_MFD_RK1000) += rk1000-core.o +obj-$(CONFIG_MFD_SERDES_DISPLAY) += display-serdes/ obj-y += rkx110_x120/ obj-$(CONFIG_MFD_RN5T618) += rn5t618.o obj-$(CONFIG_MFD_SEC_CORE) += sec-core.o sec-irq.o diff --git a/drivers/mfd/display-serdes/Kconfig b/drivers/mfd/display-serdes/Kconfig new file mode 100644 index 000000000000..18855fef3a69 --- /dev/null +++ b/drivers/mfd/display-serdes/Kconfig @@ -0,0 +1,31 @@ +# SPDX-License-Identifier: GPL-2.0-only +# +# Multifunction miscellaneous devices +# +comment "driver for different display serdes" + +menuconfig MFD_SERDES_DISPLAY + tristate "rockchip display serdes drivers support" + select DRM_PANEL_BRIDGE + select DRM_KMS_HELPER + select DRM_MIPI_DSI + select SERDES_DISPLAY_CHIP_ROHM + select SERDES_DISPLAY_CHIP_MAXIM + select SERDES_DISPLAY_CHIP_ROCKCHIP + select SERDES_DISPLAY_CHIP_NOVO + select MFD_CORE + select REGMAP_I2C + select GENERIC_PINCTRL_GROUPS + select GENERIC_PINMUX_FUNCTIONS + default n + help + This driver supports different serdes devices from different vendor such as + maxim, rohm, rockchip etc. + +if MFD_SERDES_DISPLAY +source "drivers/mfd/display-serdes/maxim/Kconfig" +source "drivers/mfd/display-serdes/rohm/Kconfig" +source "drivers/mfd/display-serdes/rockchip/Kconfig" +source "drivers/mfd/display-serdes/novo/Kconfig" +endif + diff --git a/drivers/mfd/display-serdes/Makefile b/drivers/mfd/display-serdes/Makefile new file mode 100644 index 000000000000..420076ccc22e --- /dev/null +++ b/drivers/mfd/display-serdes/Makefile @@ -0,0 +1,13 @@ +# SPDX-License-Identifier: GPL-2.0 +# +# Makefile for multifunction miscellaneous devices that just used for display +# + +obj-$(CONFIG_SERDES_DISPLAY_CHIP_MAXIM) += maxim/ +obj-$(CONFIG_SERDES_DISPLAY_CHIP_ROHM) += rohm/ +obj-$(CONFIG_SERDES_DISPLAY_CHIP_ROCKCHIP) += rockchip/ +obj-$(CONFIG_SERDES_DISPLAY_CHIP_NOVO) += novo/ + +serdes-mfd-display-$(CONFIG_MFD_SERDES_DISPLAY) += serdes-core.o serdes-irq.o + +obj-$(CONFIG_MFD_SERDES_DISPLAY) += serdes-mfd-display.o serdes-i2c.o serdes-bridge.o serdes-panel.o serdes-gpio.o serdes-pinctrl.o diff --git a/drivers/mfd/display-serdes/core.h b/drivers/mfd/display-serdes/core.h new file mode 100644 index 000000000000..28f994588964 --- /dev/null +++ b/drivers/mfd/display-serdes/core.h @@ -0,0 +1,353 @@ +/* SPDX-License-Identifier: GPL-2.0-only */ +/* + * core.h -- core define for mfd display arch + * + * Copyright (c) 2023-2028 Rockchip Electronics Co. Ltd. + * + * Author: luowei + * + */ + +#ifndef __MFD_SERDES_CORE_H__ +#define __MFD_SERDES_CORE_H__ + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#include