linux/drivers/media/platform/sunxi/sun6i-csi/sun6i_csi_bridge.c

// SPDX-License-Identifier: GPL-2.0+
/*
 * Copyright 2021-2022 Bootlin
 * Author: Paul Kocialkowski <[email protected]>
 */

#include <linux/pm_runtime.h>
#include <linux/regmap.h>
#include <media/v4l2-device.h>
#include <media/v4l2-fwnode.h>

#include "sun6i_csi.h"
#include "sun6i_csi_bridge.h"
#include "sun6i_csi_reg.h"

/* Helpers */

void sun6i_csi_bridge_dimensions(struct sun6i_csi_device *csi_dev,
				 unsigned int *width, unsigned int *height)
{}

void sun6i_csi_bridge_format(struct sun6i_csi_device *csi_dev,
			     u32 *mbus_code, u32 *field)
{}

/* Format */

static const struct sun6i_csi_bridge_format sun6i_csi_bridge_formats[] =;

const struct sun6i_csi_bridge_format *
sun6i_csi_bridge_format_find(u32 mbus_code)
{}

/* Bridge */

static void sun6i_csi_bridge_irq_enable(struct sun6i_csi_device *csi_dev)
{}

static void sun6i_csi_bridge_irq_disable(struct sun6i_csi_device *csi_dev)
{}

static void sun6i_csi_bridge_irq_clear(struct sun6i_csi_device *csi_dev)
{}

static void sun6i_csi_bridge_enable(struct sun6i_csi_device *csi_dev)
{}

static void sun6i_csi_bridge_disable(struct sun6i_csi_device *csi_dev)
{}

static void
sun6i_csi_bridge_configure_parallel(struct sun6i_csi_device *csi_dev)
{}

static void
sun6i_csi_bridge_configure_mipi_csi2(struct sun6i_csi_device *csi_dev)
{}

static void sun6i_csi_bridge_configure_format(struct sun6i_csi_device *csi_dev)
{}

static void sun6i_csi_bridge_configure(struct sun6i_csi_device *csi_dev,
				       struct sun6i_csi_bridge_source *source)
{}

/* V4L2 Subdev */

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

static const struct v4l2_subdev_video_ops sun6i_csi_bridge_video_ops =;

static void
sun6i_csi_bridge_mbus_format_prepare(struct v4l2_mbus_framefmt *mbus_format)
{}

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

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

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

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

static const struct v4l2_subdev_pad_ops sun6i_csi_bridge_pad_ops =;

static const struct v4l2_subdev_ops sun6i_csi_bridge_subdev_ops =;

static const struct v4l2_subdev_internal_ops sun6i_csi_bridge_internal_ops =;

/* Media Entity */

static const struct media_entity_operations sun6i_csi_bridge_entity_ops =;

/* V4L2 Async */

static int sun6i_csi_bridge_link(struct sun6i_csi_device *csi_dev,
				 int sink_pad_index,
				 struct v4l2_subdev *remote_subdev,
				 bool enabled)
{}

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

static int
sun6i_csi_bridge_notifier_complete(struct v4l2_async_notifier *notifier)
{}

static const struct v4l2_async_notifier_operations
sun6i_csi_bridge_notifier_ops =;

/* Bridge */

static int sun6i_csi_bridge_source_setup(struct sun6i_csi_device *csi_dev,
					 struct sun6i_csi_bridge_source *source,
					 u32 port,
					 enum v4l2_mbus_type *bus_types)
{}

int sun6i_csi_bridge_setup(struct sun6i_csi_device *csi_dev)
{}

void sun6i_csi_bridge_cleanup(struct sun6i_csi_device *csi_dev)
{}