#include <linux/firmware/imx/svc/misc.h>
#include <linux/media-bus-format.h>
#include <linux/module.h>
#include <linux/of.h>
#include <linux/of_graph.h>
#include <linux/platform_device.h>
#include <drm/drm_atomic_state_helper.h>
#include <drm/drm_bridge.h>
#include <drm/drm_print.h>
#include <dt-bindings/firmware/imx/rsrc.h>
#define DRIVER_NAME …
#define PL_MAX_MST_ADDR …
#define PL_MAX_NEXT_BRIDGES …
struct imx8qxp_pixel_link { … };
static void imx8qxp_pixel_link_enable_mst_en(struct imx8qxp_pixel_link *pl)
{ … }
static void imx8qxp_pixel_link_enable_mst_vld(struct imx8qxp_pixel_link *pl)
{ … }
static void imx8qxp_pixel_link_enable_sync(struct imx8qxp_pixel_link *pl)
{ … }
static int imx8qxp_pixel_link_disable_mst_en(struct imx8qxp_pixel_link *pl)
{ … }
static int imx8qxp_pixel_link_disable_mst_vld(struct imx8qxp_pixel_link *pl)
{ … }
static int imx8qxp_pixel_link_disable_sync(struct imx8qxp_pixel_link *pl)
{ … }
static void imx8qxp_pixel_link_set_mst_addr(struct imx8qxp_pixel_link *pl)
{ … }
static int imx8qxp_pixel_link_bridge_attach(struct drm_bridge *bridge,
enum drm_bridge_attach_flags flags)
{ … }
static void
imx8qxp_pixel_link_bridge_mode_set(struct drm_bridge *bridge,
const struct drm_display_mode *mode,
const struct drm_display_mode *adjusted_mode)
{ … }
static void
imx8qxp_pixel_link_bridge_atomic_enable(struct drm_bridge *bridge,
struct drm_bridge_state *old_bridge_state)
{ … }
static void
imx8qxp_pixel_link_bridge_atomic_disable(struct drm_bridge *bridge,
struct drm_bridge_state *old_bridge_state)
{ … }
static const u32 imx8qxp_pixel_link_bus_output_fmts[] = …;
static bool imx8qxp_pixel_link_bus_output_fmt_supported(u32 fmt)
{ … }
static u32 *
imx8qxp_pixel_link_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 *
imx8qxp_pixel_link_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 const struct drm_bridge_funcs imx8qxp_pixel_link_bridge_funcs = …;
static int imx8qxp_pixel_link_disable_all_controls(struct imx8qxp_pixel_link *pl)
{ … }
static struct drm_bridge *
imx8qxp_pixel_link_find_next_bridge(struct imx8qxp_pixel_link *pl)
{ … }
static int imx8qxp_pixel_link_bridge_probe(struct platform_device *pdev)
{ … }
static void imx8qxp_pixel_link_bridge_remove(struct platform_device *pdev)
{ … }
static const struct of_device_id imx8qxp_pixel_link_dt_ids[] = …;
MODULE_DEVICE_TABLE(of, imx8qxp_pixel_link_dt_ids);
static struct platform_driver imx8qxp_pixel_link_bridge_driver = …;
module_platform_driver(…) …;
MODULE_DESCRIPTION(…) …;
MODULE_AUTHOR(…) …;
MODULE_LICENSE(…) …;
MODULE_ALIAS(…) …;