#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 = …;
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)
{ … }
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(…) …;