mirror of https://gitee.com/openkylin/linux.git
update dma part for s3c24xx
-----BEGIN PGP SIGNATURE----- Version: GnuPG v1.4.11 (GNU/Linux) iQIcBAABAgAGBQJRt4uYAAoJEA0Cl+kVi2xqvegP/00onkUSyoL6P/YSwZ+/bgL+ h7rgkIJgV6SwN0+l3kcnXdXdhpMWexRl1rBGimSZ8XCsGQqS4n51cKI73S+H4S+H ciMXuDATP4/RxyOW14CGRgqGEr7cVjR0YSy5q6F4jKixlkD7OCYH5mncqOCG29/B bVKoO4U53y6riB8/b5zmb1/10LK1qD4EhUqQT4Apu3wp3PMB3dxYJ+miguRTMJtT jgCKe+Hkj2vTdE5jlYVdFHGNG7HJ3nGRWi4tEqvE+quZdNJQPqMVp1Nud+yBC4DF 1/wf9dTszZDKyJOu5zZFfx9m64UIbTPzdpPDQ+nA5aRTt3Adc6y2//fBP1bCKx8p hZ2w5QntiAY0vs5MjiCDwHtFDY51Lk/+FJkQvi0f6hDU+LSVs/bFt6VHmLkF6rXP 09YwmL7LNueMBMrOVD5CdKQNTGX5Tzls4rwHomlVlwauPI9lK2bE7bYiM9K0dzD/ i4Ybcf7gd04fvTDzkmtF4vh7Ze3/9f6JwjzRRczu2CF5BgtRgrRailc7m9w2Gsny /9tiCmEf8ffGQQVMJ6ADvg6nhl/yZuVCi5szeJVSNM94L2Gwnq86wdszUxuHxIoX lsip/v51FTgvFNKrTnAJ8hq8x3MLbi9lL1m/mhjRAwSyHbw9XdcbISM77QaTzCxA fEpeChSW/QLEu7EhdTNa =oS8c -----END PGP SIGNATURE----- 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: Olof Johansson <olof@lixom.net>
This commit is contained in:
commit
6e36dc69d6
|
@ -35,121 +35,95 @@ static struct s3c24xx_dma_map __initdata s3c2412_dma_mappings[] = {
|
|||
[DMACH_XD0] = {
|
||||
.name = "xdreq0",
|
||||
.channels = MAP(S3C2412_DMAREQSEL_XDREQ0),
|
||||
.channels_rx = MAP(S3C2412_DMAREQSEL_XDREQ0),
|
||||
},
|
||||
[DMACH_XD1] = {
|
||||
.name = "xdreq1",
|
||||
.channels = MAP(S3C2412_DMAREQSEL_XDREQ1),
|
||||
.channels_rx = MAP(S3C2412_DMAREQSEL_XDREQ1),
|
||||
},
|
||||
[DMACH_SDI] = {
|
||||
.name = "sdi",
|
||||
.channels = MAP(S3C2412_DMAREQSEL_SDI),
|
||||
.channels_rx = MAP(S3C2412_DMAREQSEL_SDI),
|
||||
},
|
||||
[DMACH_SPI0] = {
|
||||
.name = "spi0",
|
||||
[DMACH_SPI0_RX] = {
|
||||
.name = "spi0-rx",
|
||||
.channels = MAP(S3C2412_DMAREQSEL_SPI0RX),
|
||||
},
|
||||
[DMACH_SPI0_TX] = {
|
||||
.name = "spi0-tx",
|
||||
.channels = MAP(S3C2412_DMAREQSEL_SPI0TX),
|
||||
.channels_rx = MAP(S3C2412_DMAREQSEL_SPI0RX),
|
||||
},
|
||||
[DMACH_SPI1] = {
|
||||
.name = "spi1",
|
||||
[DMACH_SPI1_RX] = {
|
||||
.name = "spi1-rx",
|
||||
.channels = MAP(S3C2412_DMAREQSEL_SPI1RX),
|
||||
},
|
||||
[DMACH_SPI1_TX] = {
|
||||
.name = "spi1-tx",
|
||||
.channels = MAP(S3C2412_DMAREQSEL_SPI1TX),
|
||||
.channels_rx = MAP(S3C2412_DMAREQSEL_SPI1RX),
|
||||
},
|
||||
[DMACH_UART0] = {
|
||||
.name = "uart0",
|
||||
.channels = MAP(S3C2412_DMAREQSEL_UART0_0),
|
||||
.channels_rx = MAP(S3C2412_DMAREQSEL_UART0_0),
|
||||
},
|
||||
[DMACH_UART1] = {
|
||||
.name = "uart1",
|
||||
.channels = MAP(S3C2412_DMAREQSEL_UART1_0),
|
||||
.channels_rx = MAP(S3C2412_DMAREQSEL_UART1_0),
|
||||
},
|
||||
[DMACH_UART2] = {
|
||||
.name = "uart2",
|
||||
.channels = MAP(S3C2412_DMAREQSEL_UART2_0),
|
||||
.channels_rx = MAP(S3C2412_DMAREQSEL_UART2_0),
|
||||
},
|
||||
[DMACH_UART0_SRC2] = {
|
||||
.name = "uart0",
|
||||
.channels = MAP(S3C2412_DMAREQSEL_UART0_1),
|
||||
.channels_rx = MAP(S3C2412_DMAREQSEL_UART0_1),
|
||||
},
|
||||
[DMACH_UART1_SRC2] = {
|
||||
.name = "uart1",
|
||||
.channels = MAP(S3C2412_DMAREQSEL_UART1_1),
|
||||
.channels_rx = MAP(S3C2412_DMAREQSEL_UART1_1),
|
||||
},
|
||||
[DMACH_UART2_SRC2] = {
|
||||
.name = "uart2",
|
||||
.channels = MAP(S3C2412_DMAREQSEL_UART2_1),
|
||||
.channels_rx = MAP(S3C2412_DMAREQSEL_UART2_1),
|
||||
},
|
||||
[DMACH_TIMER] = {
|
||||
.name = "timer",
|
||||
.channels = MAP(S3C2412_DMAREQSEL_TIMER),
|
||||
.channels_rx = MAP(S3C2412_DMAREQSEL_TIMER),
|
||||
},
|
||||
[DMACH_I2S_IN] = {
|
||||
.name = "i2s-sdi",
|
||||
.channels = MAP(S3C2412_DMAREQSEL_I2SRX),
|
||||
.channels_rx = MAP(S3C2412_DMAREQSEL_I2SRX),
|
||||
},
|
||||
[DMACH_I2S_OUT] = {
|
||||
.name = "i2s-sdo",
|
||||
.channels = MAP(S3C2412_DMAREQSEL_I2STX),
|
||||
.channels_rx = MAP(S3C2412_DMAREQSEL_I2STX),
|
||||
},
|
||||
[DMACH_USB_EP1] = {
|
||||
.name = "usb-ep1",
|
||||
.channels = MAP(S3C2412_DMAREQSEL_USBEP1),
|
||||
.channels_rx = MAP(S3C2412_DMAREQSEL_USBEP1),
|
||||
},
|
||||
[DMACH_USB_EP2] = {
|
||||
.name = "usb-ep2",
|
||||
.channels = MAP(S3C2412_DMAREQSEL_USBEP2),
|
||||
.channels_rx = MAP(S3C2412_DMAREQSEL_USBEP2),
|
||||
},
|
||||
[DMACH_USB_EP3] = {
|
||||
.name = "usb-ep3",
|
||||
.channels = MAP(S3C2412_DMAREQSEL_USBEP3),
|
||||
.channels_rx = MAP(S3C2412_DMAREQSEL_USBEP3),
|
||||
},
|
||||
[DMACH_USB_EP4] = {
|
||||
.name = "usb-ep4",
|
||||
.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,
|
||||
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 = {
|
||||
.select = s3c2412_dma_select,
|
||||
.direction = s3c2412_dma_direction,
|
||||
.dcon_mask = 0,
|
||||
.map = s3c2412_dma_mappings,
|
||||
.map_size = ARRAY_SIZE(s3c2412_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,
|
||||
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);
|
||||
}
|
||||
|
||||
|
|
|
@ -1159,9 +1159,6 @@ int s3c2410_dma_devconfig(enum dma_ch channel,
|
|||
return -EINVAL;
|
||||
}
|
||||
|
||||
if (dma_sel.direction != NULL)
|
||||
(dma_sel.direction)(chan, chan->map, source);
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
|
|
@ -28,7 +28,6 @@ struct s3c24xx_dma_map {
|
|||
const char *name;
|
||||
|
||||
unsigned long channels[S3C_DMA_CHANNELS];
|
||||
unsigned long channels_rx[S3C_DMA_CHANNELS];
|
||||
};
|
||||
|
||||
struct s3c24xx_dma_selection {
|
||||
|
@ -38,10 +37,6 @@ struct s3c24xx_dma_selection {
|
|||
|
||||
void (*select)(struct s3c2410_dma_chan *chan,
|
||||
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);
|
||||
|
|
Loading…
Reference in New Issue