#include <linux/clk.h>
#include <linux/media-bus-format.h>
#include <linux/mfd/syscon.h>
#include <linux/module.h>
#include <linux/of.h>
#include <linux/of_graph.h>
#include <linux/phy/phy.h>
#include <linux/platform_device.h>
#include <linux/pm_runtime.h>
#include <linux/regmap.h>
#include <drm/drm_atomic_state_helper.h>
#include <drm/drm_bridge.h>
#include <drm/drm_connector.h>
#include <drm/drm_fourcc.h>
#include <drm/drm_of.h>
#include <drm/drm_print.h>
#include "imx-ldb-helper.h"
#define LDB_CH0_10BIT_EN …
#define LDB_CH1_10BIT_EN …
#define LDB_CH0_DATA_WIDTH_24BIT …
#define LDB_CH1_DATA_WIDTH_24BIT …
#define LDB_CH0_DATA_WIDTH_30BIT …
#define LDB_CH1_DATA_WIDTH_30BIT …
#define SS_CTRL …
#define CH_HSYNC_M(id) …
#define CH_VSYNC_M(id) …
#define CH_PHSYNC(id) …
#define CH_PVSYNC(id) …
#define DRIVER_NAME …
struct imx8qm_ldb_channel { … };
struct imx8qm_ldb { … };
static inline struct imx8qm_ldb_channel *
base_to_imx8qm_ldb_channel(struct ldb_channel *base)
{ … }
static inline struct imx8qm_ldb *base_to_imx8qm_ldb(struct ldb *base)
{ … }
static void imx8qm_ldb_set_phy_cfg(struct imx8qm_ldb *imx8qm_ldb,
unsigned long di_clk,
bool is_split, bool is_slave,
struct phy_configure_opts_lvds *phy_cfg)
{ … }
static int imx8qm_ldb_bridge_atomic_check(struct drm_bridge *bridge,
struct drm_bridge_state *bridge_state,
struct drm_crtc_state *crtc_state,
struct drm_connector_state *conn_state)
{ … }
static void
imx8qm_ldb_bridge_mode_set(struct drm_bridge *bridge,
const struct drm_display_mode *mode,
const struct drm_display_mode *adjusted_mode)
{ … }
static void
imx8qm_ldb_bridge_atomic_enable(struct drm_bridge *bridge,
struct drm_bridge_state *old_bridge_state)
{ … }
static void
imx8qm_ldb_bridge_atomic_disable(struct drm_bridge *bridge,
struct drm_bridge_state *old_bridge_state)
{ … }
static const u32 imx8qm_ldb_bus_output_fmts[] = …;
static bool imx8qm_ldb_bus_output_fmt_supported(u32 fmt)
{ … }
static u32 *
imx8qm_ldb_bridge_atomic_get_input_bus_fmts(struct drm_bridge *bridge,
struct drm_bridge_state *bridge_state,
struct drm_crtc_state *crtc_state,
struct drm_connector_state *conn_state,
u32 output_fmt,
unsigned int *num_input_fmts)
{ … }
static u32 *
imx8qm_ldb_bridge_atomic_get_output_bus_fmts(struct drm_bridge *bridge,
struct drm_bridge_state *bridge_state,
struct drm_crtc_state *crtc_state,
struct drm_connector_state *conn_state,
unsigned int *num_output_fmts)
{ … }
static enum drm_mode_status
imx8qm_ldb_bridge_mode_valid(struct drm_bridge *bridge,
const struct drm_display_info *info,
const struct drm_display_mode *mode)
{ … }
static const struct drm_bridge_funcs imx8qm_ldb_bridge_funcs = …;
static int imx8qm_ldb_get_phy(struct imx8qm_ldb *imx8qm_ldb)
{ … }
static int imx8qm_ldb_probe(struct platform_device *pdev)
{ … }
static void imx8qm_ldb_remove(struct platform_device *pdev)
{ … }
static int __maybe_unused imx8qm_ldb_runtime_suspend(struct device *dev)
{ … }
static int __maybe_unused imx8qm_ldb_runtime_resume(struct device *dev)
{ … }
static const struct dev_pm_ops imx8qm_ldb_pm_ops = …;
static const struct of_device_id imx8qm_ldb_dt_ids[] = …;
MODULE_DEVICE_TABLE(of, imx8qm_ldb_dt_ids);
static struct platform_driver imx8qm_ldb_driver = …;
module_platform_driver(…) …;
MODULE_DESCRIPTION(…) …;
MODULE_AUTHOR(…) …;
MODULE_LICENSE(…) …;
MODULE_ALIAS(…) …;