#include <linux/bug.h>
#include <linux/clk.h>
#include <linux/clk-provider.h>
#include <linux/device.h>
#include <linux/errno.h>
#include <linux/i2c.h>
#include <linux/kernel.h>
#include <linux/list.h>
#include <linux/module.h>
#include <linux/of.h>
#include <linux/of_platform.h>
#include <linux/of_graph.h>
#include <linux/pinctrl/consumer.h>
#include <linux/platform_device.h>
#include <linux/pm_runtime.h>
#include <linux/types.h>
#include <linux/slab.h>
#include <media/v4l2-async.h>
#include <media/v4l2-ctrls.h>
#include <media/v4l2-fwnode.h>
#include <media/media-device.h>
#include <media/drv-intf/exynos-fimc.h>
#include "media-dev.h"
#include "fimc-core.h"
#include "fimc-is.h"
#include "fimc-lite.h"
#include "mipi-csis.h"
static void __setup_sensor_notification(struct fimc_md *fmd,
struct v4l2_subdev *sensor,
struct v4l2_subdev *fimc_sd)
{ … }
static void fimc_pipeline_prepare(struct fimc_pipeline *p,
struct media_entity *me)
{ … }
static int __subdev_set_power(struct v4l2_subdev *sd, int on)
{ … }
static int fimc_pipeline_s_power(struct fimc_pipeline *p, bool on)
{ … }
static int __fimc_pipeline_enable(struct exynos_media_pipeline *ep,
struct fimc_md *fmd)
{ … }
static int __fimc_pipeline_open(struct exynos_media_pipeline *ep,
struct media_entity *me, bool prepare)
{ … }
static int __fimc_pipeline_close(struct exynos_media_pipeline *ep)
{ … }
static int __fimc_pipeline_s_stream(struct exynos_media_pipeline *ep, bool on)
{ … }
static const struct exynos_media_pipeline_ops fimc_pipeline_ops = …;
static struct exynos_media_pipeline *fimc_md_pipeline_create(
struct fimc_md *fmd)
{ … }
static void fimc_md_pipelines_free(struct fimc_md *fmd)
{ … }
static int fimc_md_parse_one_endpoint(struct fimc_md *fmd,
struct device_node *ep)
{ … }
static int fimc_md_parse_port_node(struct fimc_md *fmd,
struct device_node *port)
{ … }
static int fimc_md_register_sensor_entities(struct fimc_md *fmd)
{ … }
static int __of_get_csis_id(struct device_node *np)
{ … }
static int register_fimc_lite_entity(struct fimc_md *fmd,
struct fimc_lite *fimc_lite)
{ … }
static int register_fimc_entity(struct fimc_md *fmd, struct fimc_dev *fimc)
{ … }
static int register_csis_entity(struct fimc_md *fmd,
struct platform_device *pdev,
struct v4l2_subdev *sd)
{ … }
static int register_fimc_is_entity(struct fimc_md *fmd, struct fimc_is *is)
{ … }
static int fimc_md_register_platform_entity(struct fimc_md *fmd,
struct platform_device *pdev,
int plat_entity)
{ … }
static int fimc_md_register_platform_entities(struct fimc_md *fmd,
struct device_node *parent)
{ … }
static void fimc_md_unregister_entities(struct fimc_md *fmd)
{ … }
static int __fimc_md_create_fimc_sink_links(struct fimc_md *fmd,
struct media_entity *source,
struct v4l2_subdev *sensor,
int pad, int link_mask)
{ … }
static int __fimc_md_create_flite_source_links(struct fimc_md *fmd)
{ … }
static int __fimc_md_create_fimc_is_links(struct fimc_md *fmd)
{ … }
static int fimc_md_create_links(struct fimc_md *fmd)
{ … }
static void fimc_md_put_clocks(struct fimc_md *fmd)
{ … }
static int fimc_md_get_clocks(struct fimc_md *fmd)
{ … }
static int __fimc_md_modify_pipeline(struct media_entity *entity, bool enable)
{ … }
static int __fimc_md_modify_pipelines(struct media_entity *entity, bool enable,
struct media_graph *graph)
{ … }
static int fimc_md_link_notify(struct media_link *link, unsigned int flags,
unsigned int notification)
{ … }
static const struct media_device_ops fimc_md_ops = …;
static ssize_t subdev_conf_mode_show(struct device *dev,
struct device_attribute *attr, char *buf)
{ … }
static ssize_t subdev_conf_mode_store(struct device *dev,
struct device_attribute *attr,
const char *buf, size_t count)
{ … }
static DEVICE_ATTR_RW(subdev_conf_mode);
static int cam_clk_prepare(struct clk_hw *hw)
{ … }
static void cam_clk_unprepare(struct clk_hw *hw)
{ … }
static const struct clk_ops cam_clk_ops = …;
static void fimc_md_unregister_clk_provider(struct fimc_md *fmd)
{ … }
static int fimc_md_register_clk_provider(struct fimc_md *fmd)
{ … }
static int subdev_notifier_bound(struct v4l2_async_notifier *notifier,
struct v4l2_subdev *subdev,
struct v4l2_async_connection *asd)
{ … }
static int subdev_notifier_complete(struct v4l2_async_notifier *notifier)
{ … }
static const struct v4l2_async_notifier_operations subdev_notifier_ops = …;
static int fimc_md_probe(struct platform_device *pdev)
{ … }
static void fimc_md_remove(struct platform_device *pdev)
{ … }
static const struct platform_device_id fimc_driver_ids[] __always_unused = …;
MODULE_DEVICE_TABLE(platform, fimc_driver_ids);
static const struct of_device_id fimc_md_of_match[] = …;
MODULE_DEVICE_TABLE(of, fimc_md_of_match);
static struct platform_driver fimc_md_driver = …;
static int __init fimc_md_init(void)
{ … }
static void __exit fimc_md_exit(void)
{ … }
module_init(…) …;
module_exit(fimc_md_exit);
MODULE_AUTHOR(…) …;
MODULE_DESCRIPTION(…) …;
MODULE_LICENSE(…) …;
MODULE_VERSION(…) …;