Hi Yannick, On 13 July 2018 at 06:11, Yannick Fertré <yannick.fer...@st.com> wrote: > Add a Synopsys Designware MIPI DSI host bridge driver, based on the > Rockchip version from rockchip/dw-mipi-dsi.c with phy & bridge APIs. > > Signed-off-by: Yannick Fertré <yannick.fer...@st.com> > --- > drivers/video/Kconfig | 9 + > drivers/video/Makefile | 1 + > drivers/video/dw_mipi_dsi.c | 826 > ++++++++++++++++++++++++++++++++++++++++++++ > include/dw_mipi_dsi.h | 32 ++ > 4 files changed, 868 insertions(+) > create mode 100644 drivers/video/dw_mipi_dsi.c > create mode 100644 include/dw_mipi_dsi.h > > diff --git a/drivers/video/Kconfig b/drivers/video/Kconfig > index e1029e5..3ccc8df 100644 > --- a/drivers/video/Kconfig > +++ b/drivers/video/Kconfig > @@ -674,6 +674,15 @@ config VIDEO_DW_HDMI > rather requires a SoC-specific glue driver to call it), it > can not be enabled from the configuration menu. > > +config VIDEO_DW_MIPI_DSI > + bool > + help > + Enables the common driver code for the Synopsis Designware > + MIPI DSI block found in SoCs from various vendors. > + As this does not provide any functionality by itself (but > + rather requires a SoC-specific glue driver to call it), it > + can not be enabled from the configuration menu. > + > config VIDEO_SIMPLE > bool "Simple display driver for preconfigured display" > help > diff --git a/drivers/video/Makefile b/drivers/video/Makefile > index 018343f..bb2fd3c 100644 > --- a/drivers/video/Makefile > +++ b/drivers/video/Makefile > @@ -52,6 +52,7 @@ obj-$(CONFIG_FORMIKE) += formike.o > obj-$(CONFIG_LG4573) += lg4573.o > obj-$(CONFIG_AM335X_LCD) += am335x-fb.o > obj-$(CONFIG_VIDEO_DW_HDMI) += dw_hdmi.o > +obj-$(CONFIG_VIDEO_DW_MIPI_DSI) += dw_mipi_dsi.o > obj-${CONFIG_VIDEO_MIPI_DSI} += mipi_display.o > obj-$(CONFIG_VIDEO_SIMPLE) += simplefb.o > obj-${CONFIG_VIDEO_TEGRA124} += tegra124/ > diff --git a/drivers/video/dw_mipi_dsi.c b/drivers/video/dw_mipi_dsi.c > new file mode 100644 > index 0000000..db278c5 > --- /dev/null > +++ b/drivers/video/dw_mipi_dsi.c > @@ -0,0 +1,826 @@ > +// SPDX-License-Identifier: GPL-2.0+ > +/* > + * Copyright (C) 2016, Fuzhou Rockchip Electronics Co., Ltd > + * Copyright (C) 2018, STMicroelectronics - All Rights Reserved > + * Author(s): Philippe Cornu <philippe.co...@st.com> for STMicroelectronics. > + * Yannick Fertre <yannick.fer...@st.com> for STMicroelectronics. > + * > + * This generic Synopsys DesignWare MIPI DSI host driver is inspired from > + * the Linux Kernel driver drivers/gpu/drm/bridge/synopsys/dw-mipi-dsi.c. > + */ > + > +#include <common.h> > +#include <clk.h> > +#include <dm.h> > +#include <errno.h> > +#include <mipi_display.h> > +#include <panel.h> > +#include <video.h> > +#include <asm/io.h> > +#include <asm/arch/gpio.h> > +#include <dm/device-internal.h> > +#include <dw_mipi_dsi.h> > +#include <linux/iopoll.h> > +#include <video_bridge.h>
Please check the ordering here. > + > +#define HWVER_131 0x31333100 /* IP version 1.31 */ > + > +#define DSI_VERSION 0x00 > +#define VERSION GENMASK(31, 8) > + > +#define DSI_PWR_UP 0x04 > +#define RESET 0 > +#define POWERUP BIT(0) > + > +#define DSI_CLKMGR_CFG 0x08 > +#define TO_CLK_DIVISION(div) (((div) & 0xff) << 8) > +#define TX_ESC_CLK_DIVISION(div) ((div) & 0xff) Instead of this can you use something like: #define TO_CLK_DIVISION_SHIFT 8 #define TO_CLK_DIVISION_MASK (0xff << TO_CLK_DIVISION_SHIFT) then do the shift in the code which need it below. xxx << TO_CLK_DIVISION_SHIFT > diff --git a/include/dw_mipi_dsi.h b/include/dw_mipi_dsi.h > new file mode 100644 > index 0000000..f8482f7 > --- /dev/null > +++ b/include/dw_mipi_dsi.h > @@ -0,0 +1,32 @@ > +/* SPDX-License-Identifier: GPL-2.0+ */ > +/* > + * Copyright (C) 2017-2018, STMicroelectronics - All Rights Reserved > + * > + * Authors: Yannick Fertre <yannick.fer...@st.com> > + * Philippe Cornu <philippe.co...@st.com> > + * > + * This generic Synopsys DesignWare MIPI DSI host include is inspired from > + * the Linux Kernel include file include/drm/bridge/dw_mipi_dsi.h. > + */ > + > +#ifndef __DW_MIPI_DSI__ > +#define __DW_MIPI_DSI__ > + > +#include <mipi_display.h> > + > +struct dw_mipi_dsi_phy_ops { > + int (*init)(void *priv_data); > + int (*get_lane_mbps)(void *priv_data, struct display_timing *timings, > + u32 lanes, u32 format, unsigned int *lane_mbps); > +}; > + > +struct dw_mipi_dsi_plat_data { > + unsigned int max_data_lanes; > + const struct dw_mipi_dsi_phy_ops *phy_ops; > + struct udevice *panel; > +}; > + > +int dw_mipi_dsi_init_bridge(struct mipi_dsi_device *device); > +void dw_mipi_dsi_bridge_enable(struct mipi_dsi_device *device); This should be in a uclass I think. Regards Simon _______________________________________________ U-Boot mailing list U-Boot@lists.denx.de https://lists.denx.de/listinfo/u-boot