#define XSCD_MIN_WIDTH 640
#define XSCD_MIN_HEIGHT 480
-#define XSCD_WIDTH_OFFSET 0x10
-#define XSCD_HEIGHT_OFFSET 0x18
-#define XSCD_STRIDE_OFFSET 0x20
-#define XSCD_VID_FMT_OFFSET 0x28
-#define XSCD_SUBSAMPLE_OFFSET 0x30
-#define XSCD_SAD_OFFSET 0x38
-
-/* Hardware video formats for memory based IP */
-#define XSCD_COLOR_FMT_Y8 24
-#define XSCD_COLOR_FMT_Y10 25
-
-/* Hardware video formats for streaming based IP */
-#define XSCD_COLOR_FMT_RGB 0
-#define XSCD_COLOR_FMT_YUV_444 1
-#define XSCD_COLOR_FMT_YUV_422 2
-#define XSCD_COLOR_FMT_YUV_420 3
-
#define XSCD_V_SUBSAMPLING 16
#define XSCD_BYTE_ALIGN 16
#define MULTIPLICATION_FACTOR 100
case MEDIA_BUS_FMT_VYYUYY8_1X24:
case MEDIA_BUS_FMT_UYVY8_1X16:
case MEDIA_BUS_FMT_VUY8_1X24:
- vid_fmt = XSCD_COLOR_FMT_Y8;
+ vid_fmt = XSCD_VID_FMT_Y8;
break;
case MEDIA_BUS_FMT_VYYUYY10_4X20:
case MEDIA_BUS_FMT_UYVY10_1X20:
case MEDIA_BUS_FMT_VUY10_1X30:
- vid_fmt = XSCD_COLOR_FMT_Y10;
+ vid_fmt = XSCD_VID_FMT_Y10;
break;
default:
- vid_fmt = XSCD_COLOR_FMT_Y8;
+ vid_fmt = XSCD_VID_FMT_Y8;
}
return vid_fmt;
switch (media_bus_fmt) {
case MEDIA_BUS_FMT_VYYUYY8_1X24:
case MEDIA_BUS_FMT_VYYUYY10_4X20:
- vid_fmt = XSCD_COLOR_FMT_YUV_420;
+ vid_fmt = XSCD_VID_FMT_YUV_420;
break;
case MEDIA_BUS_FMT_UYVY8_1X16:
case MEDIA_BUS_FMT_UYVY10_1X20:
- vid_fmt = XSCD_COLOR_FMT_YUV_422;
+ vid_fmt = XSCD_VID_FMT_YUV_422;
break;
case MEDIA_BUS_FMT_VUY8_1X24:
case MEDIA_BUS_FMT_VUY10_1X30:
- vid_fmt = XSCD_COLOR_FMT_YUV_444;
+ vid_fmt = XSCD_VID_FMT_YUV_444;
break;
case MEDIA_BUS_FMT_RBG888_1X24:
case MEDIA_BUS_FMT_RBG101010_1X30:
- vid_fmt = XSCD_COLOR_FMT_RGB;
+ vid_fmt = XSCD_VID_FMT_RGB;
break;
default:
- vid_fmt = XSCD_COLOR_FMT_YUV_420;
+ vid_fmt = XSCD_VID_FMT_YUV_420;
}
return vid_fmt;
spin_lock_irqsave(&chan->dmachan.lock, flags);
if (shared_data->memory_based) {
- chan_offset = chan->id * XILINX_XSCD_CHAN_OFFSET;
+ chan_offset = chan->id * XSCD_CHAN_OFFSET;
xscd_chan_configure_params(chan, shared_data, chan_offset);
if (enable) {
if (!shared_data->active_streams) {
u32 sad, scd_threshold;
sad = xscd_read(chan->iomem, XSCD_SAD_OFFSET +
- (chan->id * XILINX_XSCD_CHAN_OFFSET));
+ (chan->id * XSCD_CHAN_OFFSET));
sad = (sad * XSCD_V_SUBSAMPLING * MULTIPLICATION_FACTOR) /
(chan->format.width * chan->format.height);
eventdata = (u32 *)&chan->event.u.data;
#include "xilinx-scenechange.h"
-/* SCD Registers */
-/* Register/Descriptor Offsets */
-#define XILINX_XSCD_CTRL_OFFSET 0x00
-#define XILINX_XSCD_GIE_OFFSET 0x04
-#define XILINX_XSCD_IE_OFFSET 0x08
-#define XILINX_XSCD_ADDR_OFFSET 0x40
-#define XILINX_XSCD_CHAN_EN_OFFSET 0x780
-
-/* Control Registers */
-#define XILINX_XSCD_CTRL_AP_START BIT(0)
-#define XILINX_XSCD_CTRL_AP_DONE BIT(1)
-#define XILINX_XSCD_CTRL_AP_IDLE BIT(2)
-#define XILINX_XSCD_CTRL_AP_READY BIT(3)
-#define XILINX_XSCD_CTRL_AUTO_RESTART BIT(7)
-#define XILINX_XSCD_GIE_EN BIT(0)
-
/**
* struct xscd_dma_device - Scene Change DMA device
* @regs: I/O mapped base address
*/
void xscd_dma_chan_enable(struct xscd_dma_chan *chan, int chan_en)
{
- xscd_write(chan->iomem, XILINX_XSCD_CHAN_EN_OFFSET, chan_en);
+ xscd_write(chan->iomem, XSCD_CHAN_EN_OFFSET, chan_en);
}
/**
void xscd_dma_start_transfer(struct xscd_dma_chan *chan)
{
struct xscd_dma_tx_descriptor *desc;
- u32 chanoffset = chan->id * XILINX_XSCD_CHAN_OFFSET;
+ u32 chanoffset = chan->id * XSCD_CHAN_OFFSET;
if (!chan->en)
return;
struct xscd_dma_tx_descriptor, node);
/* Start the transfer */
- xscd_write(chan->iomem, XILINX_XSCD_ADDR_OFFSET + chanoffset,
+ xscd_write(chan->iomem, XSCD_ADDR_OFFSET + chanoffset,
desc->sw.luma_plane_addr);
list_del(&desc->node);
struct xscd_dma_device *xdev = chan->xdev;
if (xdev->memory_based)
- xscd_clr(chan->iomem, XILINX_XSCD_CTRL_OFFSET,
- XILINX_XSCD_CTRL_AP_START);
+ xscd_clr(chan->iomem, XSCD_CTRL_OFFSET, XSCD_CTRL_AP_START);
else
/* Streaming based */
- xscd_clr(chan->iomem, XILINX_XSCD_CTRL_OFFSET,
- XILINX_XSCD_CTRL_AP_START |
- XILINX_XSCD_CTRL_AUTO_RESTART);
+ xscd_clr(chan->iomem, XSCD_CTRL_OFFSET,
+ XSCD_CTRL_AP_START | XSCD_CTRL_AUTO_RESTART);
chan->idle = true;
}
struct xscd_dma_device *xdev = chan->xdev;
if (xdev->memory_based)
- xscd_set(chan->iomem, XILINX_XSCD_CTRL_OFFSET,
- XILINX_XSCD_CTRL_AP_START);
+ xscd_set(chan->iomem, XSCD_CTRL_OFFSET, XSCD_CTRL_AP_START);
else
/* Streaming based */
- xscd_set(chan->iomem, XILINX_XSCD_CTRL_OFFSET,
- XILINX_XSCD_CTRL_AP_START |
- XILINX_XSCD_CTRL_AUTO_RESTART);
+ xscd_set(chan->iomem, XSCD_CTRL_OFFSET,
+ XSCD_CTRL_AP_START | XSCD_CTRL_AUTO_RESTART);
chan->idle = false;
}
*/
void xscd_dma_reset(struct xscd_dma_chan *chan)
{
- xscd_write(chan->iomem, XILINX_XSCD_IE_OFFSET, XILINX_XSCD_IE_AP_DONE);
- xscd_write(chan->iomem, XILINX_XSCD_GIE_OFFSET, XILINX_XSCD_GIE_EN);
+ xscd_write(chan->iomem, XSCD_IE_OFFSET, XSCD_IE_AP_DONE);
+ xscd_write(chan->iomem, XSCD_GIE_OFFSET, XSCD_GIE_EN);
}
/**
struct xscd_device *xscd = (struct xscd_device *)data;
u32 status;
- status = xscd_read(xscd->iomem, XILINX_XSCD_ISR_OFFSET);
- if (!(status & XILINX_XSCD_IE_AP_DONE))
+ status = xscd_read(xscd->iomem, XSCD_ISR_OFFSET);
+ if (!(status & XSCD_IE_AP_DONE))
return IRQ_NONE;
- xscd_write(xscd->iomem, XILINX_XSCD_ISR_OFFSET, XILINX_XSCD_IE_AP_DONE);
+ xscd_write(xscd->iomem, XSCD_ISR_OFFSET, XSCD_IE_AP_DONE);
return IRQ_HANDLED;
}
#include "../../../dma/dmaengine.h"
/* Register/Descriptor Offsets */
-#define XILINX_XSCD_ISR_OFFSET 0x0c
-#define XILINX_XSCD_CHAN_OFFSET 0x100
-
-/* Interrupt Status and Control */
-#define XILINX_XSCD_IE_AP_DONE BIT(0)
-#define XILINX_XSCD_IE_AP_READY BIT(1)
+#define XSCD_CTRL_OFFSET 0x000
+#define XSCD_CTRL_AP_START BIT(0)
+#define XSCD_CTRL_AP_DONE BIT(1)
+#define XSCD_CTRL_AP_IDLE BIT(2)
+#define XSCD_CTRL_AP_READY BIT(3)
+#define XSCD_CTRL_AUTO_RESTART BIT(7)
+
+#define XSCD_GIE_OFFSET 0x004
+#define XSCD_GIE_EN BIT(0)
+
+#define XSCD_IE_OFFSET 0x008
+#define XSCD_IE_AP_DONE BIT(0)
+#define XSCD_IE_AP_READY BIT(1)
+
+#define XSCD_ISR_OFFSET 0x00c
+#define XSCD_WIDTH_OFFSET 0x010
+#define XSCD_HEIGHT_OFFSET 0x018
+#define XSCD_STRIDE_OFFSET 0x020
+#define XSCD_VID_FMT_OFFSET 0x028
+#define XSCD_VID_FMT_RGB 0
+#define XSCD_VID_FMT_YUV_444 1
+#define XSCD_VID_FMT_YUV_422 2
+#define XSCD_VID_FMT_YUV_420 3
+#define XSCD_VID_FMT_Y8 24
+#define XSCD_VID_FMT_Y10 25
+
+#define XSCD_SUBSAMPLE_OFFSET 0x030
+#define XSCD_SAD_OFFSET 0x038
+#define XSCD_ADDR_OFFSET 0x040
+#define XSCD_CHAN_OFFSET 0x100
+#define XSCD_CHAN_EN_OFFSET 0x780
#define XSCD_MAX_CHANNELS 8