linux/drivers/media/platform/sunxi/sun8i-a83t-mipi-csi2/sun8i_a83t_mipi_csi2.c

// SPDX-License-Identifier: GPL-2.0+
/*
 * Copyright 2020 Kévin L'hôpital <[email protected]>
 * Copyright 2020-2022 Bootlin
 * Author: Paul Kocialkowski <[email protected]>
 */

#include <linux/clk.h>
#include <linux/module.h>
#include <linux/of.h>
#include <linux/phy/phy.h>
#include <linux/platform_device.h>
#include <linux/pm_runtime.h>
#include <linux/regmap.h>
#include <linux/reset.h>
#include <media/mipi-csi2.h>
#include <media/v4l2-ctrls.h>
#include <media/v4l2-device.h>
#include <media/v4l2-fwnode.h>

#include "sun8i_a83t_dphy.h"
#include "sun8i_a83t_mipi_csi2.h"
#include "sun8i_a83t_mipi_csi2_reg.h"

/* Format */

static const struct sun8i_a83t_mipi_csi2_format
sun8i_a83t_mipi_csi2_formats[] =;

static const struct sun8i_a83t_mipi_csi2_format *
sun8i_a83t_mipi_csi2_format_find(u32 mbus_code)
{}

/* Controller */

static void
sun8i_a83t_mipi_csi2_init(struct sun8i_a83t_mipi_csi2_device *csi2_dev)
{}

static void
sun8i_a83t_mipi_csi2_enable(struct sun8i_a83t_mipi_csi2_device *csi2_dev)
{}

static void
sun8i_a83t_mipi_csi2_disable(struct sun8i_a83t_mipi_csi2_device *csi2_dev)
{}

static void
sun8i_a83t_mipi_csi2_configure(struct sun8i_a83t_mipi_csi2_device *csi2_dev)
{}

/* V4L2 Subdev */

static int sun8i_a83t_mipi_csi2_s_stream(struct v4l2_subdev *subdev, int on)
{}

static const struct v4l2_subdev_video_ops
sun8i_a83t_mipi_csi2_video_ops =;

static void
sun8i_a83t_mipi_csi2_mbus_format_prepare(struct v4l2_mbus_framefmt *mbus_format)
{}

static int sun8i_a83t_mipi_csi2_init_state(struct v4l2_subdev *subdev,
					   struct v4l2_subdev_state *state)
{}

static int
sun8i_a83t_mipi_csi2_enum_mbus_code(struct v4l2_subdev *subdev,
				    struct v4l2_subdev_state *state,
				    struct v4l2_subdev_mbus_code_enum *code_enum)
{}

static int sun8i_a83t_mipi_csi2_get_fmt(struct v4l2_subdev *subdev,
					struct v4l2_subdev_state *state,
					struct v4l2_subdev_format *format)
{}

static int sun8i_a83t_mipi_csi2_set_fmt(struct v4l2_subdev *subdev,
					struct v4l2_subdev_state *state,
					struct v4l2_subdev_format *format)
{}

static const struct v4l2_subdev_pad_ops sun8i_a83t_mipi_csi2_pad_ops =;

static const struct v4l2_subdev_ops sun8i_a83t_mipi_csi2_subdev_ops =;

static const struct v4l2_subdev_internal_ops sun8i_a83t_mipi_csi2_internal_ops =;

/* Media Entity */

static const struct media_entity_operations sun8i_a83t_mipi_csi2_entity_ops =;

/* V4L2 Async */

static int
sun8i_a83t_mipi_csi2_notifier_bound(struct v4l2_async_notifier *notifier,
				    struct v4l2_subdev *remote_subdev,
				    struct v4l2_async_connection *async_subdev)
{}

static const struct v4l2_async_notifier_operations
sun8i_a83t_mipi_csi2_notifier_ops =;

/* Bridge */

static int
sun8i_a83t_mipi_csi2_bridge_source_setup(struct sun8i_a83t_mipi_csi2_device *csi2_dev)
{}

static int
sun8i_a83t_mipi_csi2_bridge_setup(struct sun8i_a83t_mipi_csi2_device *csi2_dev)
{}

static void
sun8i_a83t_mipi_csi2_bridge_cleanup(struct sun8i_a83t_mipi_csi2_device *csi2_dev)
{}

/* Platform */

static int sun8i_a83t_mipi_csi2_suspend(struct device *dev)
{}

static int sun8i_a83t_mipi_csi2_resume(struct device *dev)
{}

static const struct dev_pm_ops sun8i_a83t_mipi_csi2_pm_ops =;

static const struct regmap_config sun8i_a83t_mipi_csi2_regmap_config =;

static int
sun8i_a83t_mipi_csi2_resources_setup(struct sun8i_a83t_mipi_csi2_device *csi2_dev,
				     struct platform_device *platform_dev)
{}

static void
sun8i_a83t_mipi_csi2_resources_cleanup(struct sun8i_a83t_mipi_csi2_device *csi2_dev)
{}

static int sun8i_a83t_mipi_csi2_probe(struct platform_device *platform_dev)
{}

static void sun8i_a83t_mipi_csi2_remove(struct platform_device *platform_dev)
{}

static const struct of_device_id sun8i_a83t_mipi_csi2_of_match[] =;
MODULE_DEVICE_TABLE(of, sun8i_a83t_mipi_csi2_of_match);

static struct platform_driver sun8i_a83t_mipi_csi2_platform_driver =;
module_platform_driver();

MODULE_DESCRIPTION();
MODULE_AUTHOR();
MODULE_LICENSE();