linux/drivers/media/platform/renesas/rcar-isp.c

// SPDX-License-Identifier: GPL-2.0
/*
 * Copyright (C) 2021 Renesas Electronics Corp.
 *
 * Driver for Renesas R-Car ISP Channel Selector
 *
 * The ISP hardware is capable of more than just channel selection, features
 * such as demosaicing, white balance control and color space conversion are
 * also possible. These more advanced features are not supported by the driver
 * due to lack of documentation.
 */

#include <linux/module.h>
#include <linux/mutex.h>
#include <linux/of.h>
#include <linux/platform_device.h>
#include <linux/pm_runtime.h>
#include <linux/reset.h>

#include <media/mipi-csi2.h>
#include <media/v4l2-subdev.h>

#define ISPINPUTSEL0_REG
#define ISPINPUTSEL0_SEL_CSI0

#define ISPSTART_REG
#define ISPSTART_START
#define ISPSTART_STOP

#define ISPPROCMODE_DT_REG(n)
#define ISPPROCMODE_DT_PROC_MODE_VC3(pm)
#define ISPPROCMODE_DT_PROC_MODE_VC2(pm)
#define ISPPROCMODE_DT_PROC_MODE_VC1(pm)
#define ISPPROCMODE_DT_PROC_MODE_VC0(pm)

#define ISPCS_FILTER_ID_CH_REG(n)

#define ISPCS_DT_CODE03_CH_REG(n)
#define ISPCS_DT_CODE03_EN3
#define ISPCS_DT_CODE03_DT3(dt)
#define ISPCS_DT_CODE03_EN2
#define ISPCS_DT_CODE03_DT2(dt)
#define ISPCS_DT_CODE03_EN1
#define ISPCS_DT_CODE03_DT1(dt)
#define ISPCS_DT_CODE03_EN0
#define ISPCS_DT_CODE03_DT0(dt)

struct rcar_isp_format {};

static const struct rcar_isp_format rcar_isp_formats[] =;

static const struct rcar_isp_format *risp_code_to_fmt(unsigned int code)
{}

enum rcar_isp_input {};

enum rcar_isp_pads {};

struct rcar_isp {};

static inline struct rcar_isp *sd_to_isp(struct v4l2_subdev *sd)
{}

static inline struct rcar_isp *notifier_to_isp(struct v4l2_async_notifier *n)
{}

static void risp_write(struct rcar_isp *isp, u32 offset, u32 value)
{}

static u32 risp_read(struct rcar_isp *isp, u32 offset)
{}

static int risp_power_on(struct rcar_isp *isp)
{}

static void risp_power_off(struct rcar_isp *isp)
{}

static int risp_start(struct rcar_isp *isp)
{}

static void risp_stop(struct rcar_isp *isp)
{}

static int risp_s_stream(struct v4l2_subdev *sd, int enable)
{}

static const struct v4l2_subdev_video_ops risp_video_ops =;

static int risp_set_pad_format(struct v4l2_subdev *sd,
			       struct v4l2_subdev_state *sd_state,
			       struct v4l2_subdev_format *format)
{}

static int risp_get_pad_format(struct v4l2_subdev *sd,
			       struct v4l2_subdev_state *sd_state,
			       struct v4l2_subdev_format *format)
{}

static const struct v4l2_subdev_pad_ops risp_pad_ops =;

static const struct v4l2_subdev_ops rcar_isp_subdev_ops =;

/* -----------------------------------------------------------------------------
 * Async handling and registration of subdevices and links
 */

static int risp_notify_bound(struct v4l2_async_notifier *notifier,
			     struct v4l2_subdev *subdev,
			     struct v4l2_async_connection *asd)
{}

static void risp_notify_unbind(struct v4l2_async_notifier *notifier,
			       struct v4l2_subdev *subdev,
			       struct v4l2_async_connection *asd)
{}

static const struct v4l2_async_notifier_operations risp_notify_ops =;

static int risp_parse_dt(struct rcar_isp *isp)
{}

/* -----------------------------------------------------------------------------
 * Platform Device Driver
 */

static const struct media_entity_operations risp_entity_ops =;

static int risp_probe_resources(struct rcar_isp *isp,
				struct platform_device *pdev)
{}

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

static int risp_probe(struct platform_device *pdev)
{}

static void risp_remove(struct platform_device *pdev)
{}

static struct platform_driver rcar_isp_driver =;

module_platform_driver();

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