Re: [PATCH v4 1/2] [media] atmel-isc: add the Image Sensor Controller code
Hi Songjun, On Tue, 7 Jun 2016 15:11:52 +0800 Songjun Wu wrote: > Add driver for the Image Sensor Controller. It manages > incoming data from a parallel based CMOS/CCD sensor. > It has an internal image processor, also integrates a > triple channel direct memory access controller master > interface. > > Signed-off-by: Songjun Wu > --- > > Changes in v4: > - Modify the isc clock code since the dt is changed. > > Changes in v3: > - Add pm runtime feature. > - Modify the isc clock code since the dt is changed. > > Changes in v2: > - Add "depends on COMMON_CLK" and "VIDEO_V4L2_SUBDEV_API" > in Kconfig file. > - Correct typos and coding style according to Laurent's remarks > - Delete the loop while in 'isc_clk_enable' function. > - Add the code to support VIDIOC_CREATE_BUFS in > 'isc_queue_setup' function. > - Invoke isc_config to configure register in > 'isc_start_streaming' function. > - Add the struct completion 'comp' to synchronize with > the frame end interrupt in 'isc_stop_streaming' function. > - Check the return value of the clk_prepare_enable > in 'isc_open' function. > - Set the default format in 'isc_open' function. > - Add an exit condition in the loop while in 'isc_config'. > - Delete the hardware setup operation in 'isc_set_format'. > - Refuse format modification during streaming > in 'isc_s_fmt_vid_cap' function. > - Invoke v4l2_subdev_alloc_pad_config to allocate and > initialize the pad config in 'isc_async_complete' function. > - Remove the '.owner = THIS_MODULE,' in atmel_isc_driver. > - Replace the module_platform_driver_probe() with > module_platform_driver(). > > drivers/media/platform/Kconfig|1 + > drivers/media/platform/Makefile |2 + > drivers/media/platform/atmel/Kconfig |9 + > drivers/media/platform/atmel/Makefile |1 + > drivers/media/platform/atmel/atmel-isc-regs.h | 276 + > drivers/media/platform/atmel/atmel-isc.c | 1580 > + > 6 files changed, 1869 insertions(+) > create mode 100644 drivers/media/platform/atmel/Kconfig > create mode 100644 drivers/media/platform/atmel/Makefile > create mode 100644 drivers/media/platform/atmel/atmel-isc-regs.h > create mode 100644 drivers/media/platform/atmel/atmel-isc.c > > diff --git a/drivers/media/platform/Kconfig b/drivers/media/platform/Kconfig > index 84e041c..91d7aea 100644 > --- a/drivers/media/platform/Kconfig > +++ b/drivers/media/platform/Kconfig > @@ -110,6 +110,7 @@ source "drivers/media/platform/exynos4-is/Kconfig" > source "drivers/media/platform/s5p-tv/Kconfig" > source "drivers/media/platform/am437x/Kconfig" > source "drivers/media/platform/xilinx/Kconfig" > +source "drivers/media/platform/atmel/Kconfig" > > config VIDEO_TI_CAL > tristate "TI CAL (Camera Adaptation Layer) driver" > diff --git a/drivers/media/platform/Makefile b/drivers/media/platform/Makefile > index bbb7bd1..ad8f471 100644 > --- a/drivers/media/platform/Makefile > +++ b/drivers/media/platform/Makefile > @@ -55,4 +55,6 @@ obj-$(CONFIG_VIDEO_AM437X_VPFE) += am437x/ > > obj-$(CONFIG_VIDEO_XILINX) += xilinx/ > > +obj-$(CONFIG_VIDEO_ATMEL_ISC)+= atmel/ > + > ccflags-y += -I$(srctree)/drivers/media/i2c > diff --git a/drivers/media/platform/atmel/Kconfig > b/drivers/media/platform/atmel/Kconfig > new file mode 100644 > index 000..867dca2 > --- /dev/null > +++ b/drivers/media/platform/atmel/Kconfig > @@ -0,0 +1,9 @@ > +config VIDEO_ATMEL_ISC > + tristate "ATMEL Image Sensor Controller (ISC) support" > + depends on VIDEO_V4L2 && COMMON_CLK && VIDEO_V4L2_SUBDEV_API && HAS_DMA > + depends on ARCH_AT91 || COMPILE_TEST > + select VIDEOBUF2_DMA_CONTIG > + select REGMAP_MMIO > + help > +This module makes the ATMEL Image Sensor Controller available > +as a v4l2 device. > \ No newline at end of file > diff --git a/drivers/media/platform/atmel/Makefile > b/drivers/media/platform/atmel/Makefile > new file mode 100644 > index 000..9d7c999 > --- /dev/null > +++ b/drivers/media/platform/atmel/Makefile > @@ -0,0 +1 @@ > +obj-$(CONFIG_VIDEO_ATMEL_ISC) += atmel-isc.o > diff --git a/drivers/media/platform/atmel/atmel-isc-regs.h > b/drivers/media/platform/atmel/atmel-isc-regs.h > new file mode 100644 > index 000..dda9396 > --- /dev/null > +++ b/drivers/media/platform/atmel/atmel-isc-regs.h > @@ -0,0 +1,276 @@ > +#ifndef __ATMEL_ISC_REGS_H > +#define __ATMEL_ISC_REGS_H > + > +#include > + > +/* ISC Control Enable Register 0 */ > +#define ISC_CTRLEN 0x > + > +#define ISC_CTRLEN_CAPTURE BIT(0) > +#define ISC_CTRLEN_CAPTURE_MASK BIT(0) > + > +#define ISC_CTRLEN_UPPROBIT(1) > +#define ISC_CTRLEN_UPPRO_MASK BIT(1) > + > +#define ISC_CTRLEN_HISREQ BIT(2) > +#define ISC_CTRLEN_HISREQ_MASK BIT(2) > + > +#define ISC_CTRLEN_HISCLR BIT(3) > +#define ISC_CTRLEN_HISC
[PATCH v4 1/2] [media] atmel-isc: add the Image Sensor Controller code
Add driver for the Image Sensor Controller. It manages incoming data from a parallel based CMOS/CCD sensor. It has an internal image processor, also integrates a triple channel direct memory access controller master interface. Signed-off-by: Songjun Wu --- Changes in v4: - Modify the isc clock code since the dt is changed. Changes in v3: - Add pm runtime feature. - Modify the isc clock code since the dt is changed. Changes in v2: - Add "depends on COMMON_CLK" and "VIDEO_V4L2_SUBDEV_API" in Kconfig file. - Correct typos and coding style according to Laurent's remarks - Delete the loop while in 'isc_clk_enable' function. - Add the code to support VIDIOC_CREATE_BUFS in 'isc_queue_setup' function. - Invoke isc_config to configure register in 'isc_start_streaming' function. - Add the struct completion 'comp' to synchronize with the frame end interrupt in 'isc_stop_streaming' function. - Check the return value of the clk_prepare_enable in 'isc_open' function. - Set the default format in 'isc_open' function. - Add an exit condition in the loop while in 'isc_config'. - Delete the hardware setup operation in 'isc_set_format'. - Refuse format modification during streaming in 'isc_s_fmt_vid_cap' function. - Invoke v4l2_subdev_alloc_pad_config to allocate and initialize the pad config in 'isc_async_complete' function. - Remove the '.owner = THIS_MODULE,' in atmel_isc_driver. - Replace the module_platform_driver_probe() with module_platform_driver(). drivers/media/platform/Kconfig|1 + drivers/media/platform/Makefile |2 + drivers/media/platform/atmel/Kconfig |9 + drivers/media/platform/atmel/Makefile |1 + drivers/media/platform/atmel/atmel-isc-regs.h | 276 + drivers/media/platform/atmel/atmel-isc.c | 1580 + 6 files changed, 1869 insertions(+) create mode 100644 drivers/media/platform/atmel/Kconfig create mode 100644 drivers/media/platform/atmel/Makefile create mode 100644 drivers/media/platform/atmel/atmel-isc-regs.h create mode 100644 drivers/media/platform/atmel/atmel-isc.c diff --git a/drivers/media/platform/Kconfig b/drivers/media/platform/Kconfig index 84e041c..91d7aea 100644 --- a/drivers/media/platform/Kconfig +++ b/drivers/media/platform/Kconfig @@ -110,6 +110,7 @@ source "drivers/media/platform/exynos4-is/Kconfig" source "drivers/media/platform/s5p-tv/Kconfig" source "drivers/media/platform/am437x/Kconfig" source "drivers/media/platform/xilinx/Kconfig" +source "drivers/media/platform/atmel/Kconfig" config VIDEO_TI_CAL tristate "TI CAL (Camera Adaptation Layer) driver" diff --git a/drivers/media/platform/Makefile b/drivers/media/platform/Makefile index bbb7bd1..ad8f471 100644 --- a/drivers/media/platform/Makefile +++ b/drivers/media/platform/Makefile @@ -55,4 +55,6 @@ obj-$(CONFIG_VIDEO_AM437X_VPFE) += am437x/ obj-$(CONFIG_VIDEO_XILINX) += xilinx/ +obj-$(CONFIG_VIDEO_ATMEL_ISC) += atmel/ + ccflags-y += -I$(srctree)/drivers/media/i2c diff --git a/drivers/media/platform/atmel/Kconfig b/drivers/media/platform/atmel/Kconfig new file mode 100644 index 000..867dca2 --- /dev/null +++ b/drivers/media/platform/atmel/Kconfig @@ -0,0 +1,9 @@ +config VIDEO_ATMEL_ISC + tristate "ATMEL Image Sensor Controller (ISC) support" + depends on VIDEO_V4L2 && COMMON_CLK && VIDEO_V4L2_SUBDEV_API && HAS_DMA + depends on ARCH_AT91 || COMPILE_TEST + select VIDEOBUF2_DMA_CONTIG + select REGMAP_MMIO + help + This module makes the ATMEL Image Sensor Controller available + as a v4l2 device. \ No newline at end of file diff --git a/drivers/media/platform/atmel/Makefile b/drivers/media/platform/atmel/Makefile new file mode 100644 index 000..9d7c999 --- /dev/null +++ b/drivers/media/platform/atmel/Makefile @@ -0,0 +1 @@ +obj-$(CONFIG_VIDEO_ATMEL_ISC) += atmel-isc.o diff --git a/drivers/media/platform/atmel/atmel-isc-regs.h b/drivers/media/platform/atmel/atmel-isc-regs.h new file mode 100644 index 000..dda9396 --- /dev/null +++ b/drivers/media/platform/atmel/atmel-isc-regs.h @@ -0,0 +1,276 @@ +#ifndef __ATMEL_ISC_REGS_H +#define __ATMEL_ISC_REGS_H + +#include + +/* ISC Control Enable Register 0 */ +#define ISC_CTRLEN 0x + +#define ISC_CTRLEN_CAPTURE BIT(0) +#define ISC_CTRLEN_CAPTURE_MASK BIT(0) + +#define ISC_CTRLEN_UPPROBIT(1) +#define ISC_CTRLEN_UPPRO_MASK BIT(1) + +#define ISC_CTRLEN_HISREQ BIT(2) +#define ISC_CTRLEN_HISREQ_MASK BIT(2) + +#define ISC_CTRLEN_HISCLR BIT(3) +#define ISC_CTRLEN_HISCLR_MASK BIT(3) + +/* ISC Control Disable Register 0 */ +#define ISC_CTRLDIS 0x0004 + +#define ISC_CTRLDIS_DISABLE BIT(0) +#define ISC_CTRLDIS_DISABLE_MASKBIT(0) + +#define ISC_CTRLDIS_SWRST BIT(8) +#define ISC_CTRLDIS_SWRST_MASK BIT(8) + +/* ISC