// SPDX-License-Identifier: GPL-2.0+ /* * V4L2 Media Controller Driver for Freescale i.MX5/6 SOC * * Copyright (c) 2016 Mentor Graphics Inc. */ #include <linux/module.h> #include "imx-media.h" #define IMX_BUS_FMTS(fmt...) … /* * List of supported pixel formats for the subdevs. */ static const struct imx_media_pixfmt pixel_formats[] = …; /* * Search in the pixel_formats[] array for an entry with the given fourcc * that matches the requested selection criteria and return it. * * @fourcc: Search for an entry with the given fourcc pixel format. * @fmt_sel: Allow entries only with the given selection criteria. */ const struct imx_media_pixfmt * imx_media_find_pixel_format(u32 fourcc, enum imx_pixfmt_sel fmt_sel) { … } EXPORT_SYMBOL_GPL(…); /* * Search in the pixel_formats[] array for an entry with the given media * bus code that matches the requested selection criteria and return it. * * @code: Search for an entry with the given media-bus code. * @fmt_sel: Allow entries only with the given selection criteria. */ const struct imx_media_pixfmt * imx_media_find_mbus_format(u32 code, enum imx_pixfmt_sel fmt_sel) { … } EXPORT_SYMBOL_GPL(…); /* * Enumerate entries in the pixel_formats[] array that match the * requested selection criteria. Return the fourcc that matches the * selection criteria at the requested match index. * * @fourcc: The returned fourcc that matches the search criteria at * the requested match index. * @index: The requested match index. * @fmt_sel: Include in the enumeration entries with the given selection * criteria. * @code: If non-zero, only include in the enumeration entries matching this * media bus code. */ int imx_media_enum_pixel_formats(u32 *fourcc, u32 index, enum imx_pixfmt_sel fmt_sel, u32 code) { … } EXPORT_SYMBOL_GPL(…); /* * Enumerate entries in the pixel_formats[] array that match the * requested search criteria. Return the media-bus code that matches * the search criteria at the requested match index. * * @code: The returned media-bus code that matches the search criteria at * the requested match index. * @index: The requested match index. * @fmt_sel: Include in the enumeration entries with the given selection * criteria. */ int imx_media_enum_mbus_formats(u32 *code, u32 index, enum imx_pixfmt_sel fmt_sel) { … } EXPORT_SYMBOL_GPL(…); int imx_media_init_mbus_fmt(struct v4l2_mbus_framefmt *mbus, u32 width, u32 height, u32 code, u32 field, const struct imx_media_pixfmt **cc) { … } EXPORT_SYMBOL_GPL(…); /* * Initializes the TRY format to the ACTIVE format on all pads * of a subdev. Can be used as the .init_state internal operation. */ int imx_media_init_state(struct v4l2_subdev *sd, struct v4l2_subdev_state *sd_state) { … } EXPORT_SYMBOL_GPL(…); /* * Default the colorspace in tryfmt to SRGB if set to an unsupported * colorspace or not initialized. Then set the remaining colorimetry * parameters based on the colorspace if they are uninitialized. * * tryfmt->code must be set on entry. * * If this format is destined to be routed through the Image Converter, * Y`CbCr encoding must be fixed. The IC supports only BT.601 Y`CbCr * or Rec.709 Y`CbCr encoding. */ void imx_media_try_colorimetry(struct v4l2_mbus_framefmt *tryfmt, bool ic_route) { … } EXPORT_SYMBOL_GPL(…); int imx_media_mbus_fmt_to_pix_fmt(struct v4l2_pix_format *pix, const struct v4l2_mbus_framefmt *mbus, const struct imx_media_pixfmt *cc) { … } EXPORT_SYMBOL_GPL(…); void imx_media_free_dma_buf(struct device *dev, struct imx_media_dma_buf *buf) { … } EXPORT_SYMBOL_GPL(…); int imx_media_alloc_dma_buf(struct device *dev, struct imx_media_dma_buf *buf, int size) { … } EXPORT_SYMBOL_GPL(…); /* form a subdev name given a group id and ipu id */ void imx_media_grp_id_to_sd_name(char *sd_name, int sz, u32 grp_id, int ipu_id) { … } EXPORT_SYMBOL_GPL(…); /* * Adds a video device to the master video device list. This is called * when a video device is registered. */ void imx_media_add_video_device(struct imx_media_dev *imxmd, struct imx_media_video_dev *vdev) { … } EXPORT_SYMBOL_GPL(…); /* * Search upstream/downstream for a subdevice or video device pad in the * current pipeline, starting from start_entity. Returns the device's * source/sink pad that it was reached from. Must be called with * mdev->graph_mutex held. * * If grp_id != 0, finds a subdevice's pad of given grp_id. * Else If buftype != 0, finds a video device's pad of given buffer type. * Else, returns the nearest source/sink pad to start_entity. */ struct media_pad * imx_media_pipeline_pad(struct media_entity *start_entity, u32 grp_id, enum v4l2_buf_type buftype, bool upstream) { … } EXPORT_SYMBOL_GPL(…); /* * Search upstream/downstream for a subdev or video device in the current * pipeline. Must be called with mdev->graph_mutex held. */ static struct media_entity * find_pipeline_entity(struct media_entity *start, u32 grp_id, enum v4l2_buf_type buftype, bool upstream) { … } /* * Find a subdev reached upstream from the given start entity in * the current pipeline. * Must be called with mdev->graph_mutex held. */ struct v4l2_subdev * imx_media_pipeline_subdev(struct media_entity *start_entity, u32 grp_id, bool upstream) { … } EXPORT_SYMBOL_GPL(…); /* * Turn current pipeline streaming on/off starting from entity. */ int imx_media_pipeline_set_stream(struct imx_media_dev *imxmd, struct media_entity *entity, bool on) { … } EXPORT_SYMBOL_GPL(…); MODULE_DESCRIPTION(…) …; MODULE_AUTHOR(…) …; MODULE_LICENSE(…) …;