Commit 6e36dc69 authored by Olof Johansson's avatar Olof Johansson

Merge tag 's3c24xx-arch-1' of...

Merge tag 's3c24xx-arch-1' of git://git.kernel.org/pub/scm/linux/kernel/git/kgene/linux-samsung into next/soc

From Kukjin Kim, DMA driver updates for s3c24xx.

* tag 's3c24xx-arch-1' of git://git.kernel.org/pub/scm/linux/kernel/git/kgene/linux-samsung:
  ARM: S3C24XX: remove obsolete s3c2412 specific dma settings
  ARM: S3C24XX: dma-s3c2443 - do not write into arbitary bits
  ARM: S3C24XX: split s3c2412 spi dma channels
Signed-off-by: default avatarOlof Johansson <olof@lixom.net>
parents 1780db9e a496bda6
...@@ -35,121 +35,95 @@ static struct s3c24xx_dma_map __initdata s3c2412_dma_mappings[] = { ...@@ -35,121 +35,95 @@ static struct s3c24xx_dma_map __initdata s3c2412_dma_mappings[] = {
[DMACH_XD0] = { [DMACH_XD0] = {
.name = "xdreq0", .name = "xdreq0",
.channels = MAP(S3C2412_DMAREQSEL_XDREQ0), .channels = MAP(S3C2412_DMAREQSEL_XDREQ0),
.channels_rx = MAP(S3C2412_DMAREQSEL_XDREQ0),
}, },
[DMACH_XD1] = { [DMACH_XD1] = {
.name = "xdreq1", .name = "xdreq1",
.channels = MAP(S3C2412_DMAREQSEL_XDREQ1), .channels = MAP(S3C2412_DMAREQSEL_XDREQ1),
.channels_rx = MAP(S3C2412_DMAREQSEL_XDREQ1),
}, },
[DMACH_SDI] = { [DMACH_SDI] = {
.name = "sdi", .name = "sdi",
.channels = MAP(S3C2412_DMAREQSEL_SDI), .channels = MAP(S3C2412_DMAREQSEL_SDI),
.channels_rx = MAP(S3C2412_DMAREQSEL_SDI),
}, },
[DMACH_SPI0] = { [DMACH_SPI0_RX] = {
.name = "spi0", .name = "spi0-rx",
.channels = MAP(S3C2412_DMAREQSEL_SPI0RX),
},
[DMACH_SPI0_TX] = {
.name = "spi0-tx",
.channels = MAP(S3C2412_DMAREQSEL_SPI0TX), .channels = MAP(S3C2412_DMAREQSEL_SPI0TX),
.channels_rx = MAP(S3C2412_DMAREQSEL_SPI0RX),
}, },
[DMACH_SPI1] = { [DMACH_SPI1_RX] = {
.name = "spi1", .name = "spi1-rx",
.channels = MAP(S3C2412_DMAREQSEL_SPI1RX),
},
[DMACH_SPI1_TX] = {
.name = "spi1-tx",
.channels = MAP(S3C2412_DMAREQSEL_SPI1TX), .channels = MAP(S3C2412_DMAREQSEL_SPI1TX),
.channels_rx = MAP(S3C2412_DMAREQSEL_SPI1RX),
}, },
[DMACH_UART0] = { [DMACH_UART0] = {
.name = "uart0", .name = "uart0",
.channels = MAP(S3C2412_DMAREQSEL_UART0_0), .channels = MAP(S3C2412_DMAREQSEL_UART0_0),
.channels_rx = MAP(S3C2412_DMAREQSEL_UART0_0),
}, },
[DMACH_UART1] = { [DMACH_UART1] = {
.name = "uart1", .name = "uart1",
.channels = MAP(S3C2412_DMAREQSEL_UART1_0), .channels = MAP(S3C2412_DMAREQSEL_UART1_0),
.channels_rx = MAP(S3C2412_DMAREQSEL_UART1_0),
}, },
[DMACH_UART2] = { [DMACH_UART2] = {
.name = "uart2", .name = "uart2",
.channels = MAP(S3C2412_DMAREQSEL_UART2_0), .channels = MAP(S3C2412_DMAREQSEL_UART2_0),
.channels_rx = MAP(S3C2412_DMAREQSEL_UART2_0),
}, },
[DMACH_UART0_SRC2] = { [DMACH_UART0_SRC2] = {
.name = "uart0", .name = "uart0",
.channels = MAP(S3C2412_DMAREQSEL_UART0_1), .channels = MAP(S3C2412_DMAREQSEL_UART0_1),
.channels_rx = MAP(S3C2412_DMAREQSEL_UART0_1),
}, },
[DMACH_UART1_SRC2] = { [DMACH_UART1_SRC2] = {
.name = "uart1", .name = "uart1",
.channels = MAP(S3C2412_DMAREQSEL_UART1_1), .channels = MAP(S3C2412_DMAREQSEL_UART1_1),
.channels_rx = MAP(S3C2412_DMAREQSEL_UART1_1),
}, },
[DMACH_UART2_SRC2] = { [DMACH_UART2_SRC2] = {
.name = "uart2", .name = "uart2",
.channels = MAP(S3C2412_DMAREQSEL_UART2_1), .channels = MAP(S3C2412_DMAREQSEL_UART2_1),
.channels_rx = MAP(S3C2412_DMAREQSEL_UART2_1),
}, },
[DMACH_TIMER] = { [DMACH_TIMER] = {
.name = "timer", .name = "timer",
.channels = MAP(S3C2412_DMAREQSEL_TIMER), .channels = MAP(S3C2412_DMAREQSEL_TIMER),
.channels_rx = MAP(S3C2412_DMAREQSEL_TIMER),
}, },
[DMACH_I2S_IN] = { [DMACH_I2S_IN] = {
.name = "i2s-sdi", .name = "i2s-sdi",
.channels = MAP(S3C2412_DMAREQSEL_I2SRX), .channels = MAP(S3C2412_DMAREQSEL_I2SRX),
.channels_rx = MAP(S3C2412_DMAREQSEL_I2SRX),
}, },
[DMACH_I2S_OUT] = { [DMACH_I2S_OUT] = {
.name = "i2s-sdo", .name = "i2s-sdo",
.channels = MAP(S3C2412_DMAREQSEL_I2STX), .channels = MAP(S3C2412_DMAREQSEL_I2STX),
.channels_rx = MAP(S3C2412_DMAREQSEL_I2STX),
}, },
[DMACH_USB_EP1] = { [DMACH_USB_EP1] = {
.name = "usb-ep1", .name = "usb-ep1",
.channels = MAP(S3C2412_DMAREQSEL_USBEP1), .channels = MAP(S3C2412_DMAREQSEL_USBEP1),
.channels_rx = MAP(S3C2412_DMAREQSEL_USBEP1),
}, },
[DMACH_USB_EP2] = { [DMACH_USB_EP2] = {
.name = "usb-ep2", .name = "usb-ep2",
.channels = MAP(S3C2412_DMAREQSEL_USBEP2), .channels = MAP(S3C2412_DMAREQSEL_USBEP2),
.channels_rx = MAP(S3C2412_DMAREQSEL_USBEP2),
}, },
[DMACH_USB_EP3] = { [DMACH_USB_EP3] = {
.name = "usb-ep3", .name = "usb-ep3",
.channels = MAP(S3C2412_DMAREQSEL_USBEP3), .channels = MAP(S3C2412_DMAREQSEL_USBEP3),
.channels_rx = MAP(S3C2412_DMAREQSEL_USBEP3),
}, },
[DMACH_USB_EP4] = { [DMACH_USB_EP4] = {
.name = "usb-ep4", .name = "usb-ep4",
.channels = MAP(S3C2412_DMAREQSEL_USBEP4), .channels = MAP(S3C2412_DMAREQSEL_USBEP4),
.channels_rx = MAP(S3C2412_DMAREQSEL_USBEP4),
}, },
}; };
static void s3c2412_dma_direction(struct s3c2410_dma_chan *chan,
struct s3c24xx_dma_map *map,
enum dma_data_direction dir)
{
unsigned long chsel;
if (dir == DMA_FROM_DEVICE)
chsel = map->channels_rx[0];
else
chsel = map->channels[0];
chsel &= ~DMA_CH_VALID;
chsel |= S3C2412_DMAREQSEL_HW;
writel(chsel, chan->regs + S3C2412_DMA_DMAREQSEL);
}
static void s3c2412_dma_select(struct s3c2410_dma_chan *chan, static void s3c2412_dma_select(struct s3c2410_dma_chan *chan,
struct s3c24xx_dma_map *map) struct s3c24xx_dma_map *map)
{ {
s3c2412_dma_direction(chan, map, chan->source); unsigned long chsel = map->channels[0] & (~DMA_CH_VALID);
writel(chsel | S3C2412_DMAREQSEL_HW,
chan->regs + S3C2412_DMA_DMAREQSEL);
} }
static struct s3c24xx_dma_selection __initdata s3c2412_dma_sel = { static struct s3c24xx_dma_selection __initdata s3c2412_dma_sel = {
.select = s3c2412_dma_select, .select = s3c2412_dma_select,
.direction = s3c2412_dma_direction,
.dcon_mask = 0, .dcon_mask = 0,
.map = s3c2412_dma_mappings, .map = s3c2412_dma_mappings,
.map_size = ARRAY_SIZE(s3c2412_dma_mappings), .map_size = ARRAY_SIZE(s3c2412_dma_mappings),
......
...@@ -128,7 +128,8 @@ static struct s3c24xx_dma_map __initdata s3c2443_dma_mappings[] = { ...@@ -128,7 +128,8 @@ static struct s3c24xx_dma_map __initdata s3c2443_dma_mappings[] = {
static void s3c2443_dma_select(struct s3c2410_dma_chan *chan, static void s3c2443_dma_select(struct s3c2410_dma_chan *chan,
struct s3c24xx_dma_map *map) struct s3c24xx_dma_map *map)
{ {
writel(map->channels[0] | S3C2443_DMAREQSEL_HW, unsigned long chsel = map->channels[0] & (~DMA_CH_VALID);
writel(chsel | S3C2443_DMAREQSEL_HW,
chan->regs + S3C2443_DMA_DMAREQSEL); chan->regs + S3C2443_DMA_DMAREQSEL);
} }
......
...@@ -1159,9 +1159,6 @@ int s3c2410_dma_devconfig(enum dma_ch channel, ...@@ -1159,9 +1159,6 @@ int s3c2410_dma_devconfig(enum dma_ch channel,
return -EINVAL; return -EINVAL;
} }
if (dma_sel.direction != NULL)
(dma_sel.direction)(chan, chan->map, source);
return 0; return 0;
} }
......
...@@ -28,7 +28,6 @@ struct s3c24xx_dma_map { ...@@ -28,7 +28,6 @@ struct s3c24xx_dma_map {
const char *name; const char *name;
unsigned long channels[S3C_DMA_CHANNELS]; unsigned long channels[S3C_DMA_CHANNELS];
unsigned long channels_rx[S3C_DMA_CHANNELS];
}; };
struct s3c24xx_dma_selection { struct s3c24xx_dma_selection {
...@@ -38,10 +37,6 @@ struct s3c24xx_dma_selection { ...@@ -38,10 +37,6 @@ struct s3c24xx_dma_selection {
void (*select)(struct s3c2410_dma_chan *chan, void (*select)(struct s3c2410_dma_chan *chan,
struct s3c24xx_dma_map *map); struct s3c24xx_dma_map *map);
void (*direction)(struct s3c2410_dma_chan *chan,
struct s3c24xx_dma_map *map,
enum dma_data_direction dir);
}; };
extern int s3c24xx_dma_init_map(struct s3c24xx_dma_selection *sel); extern int s3c24xx_dma_init_map(struct s3c24xx_dma_selection *sel);
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment