mirror of
https://github.com/AuxXxilium/linux_dsm_epyc7002.git
synced 2024-12-23 15:49:17 +07:00
c4e1662550
This patch adds common DMA operations which are used for Samsung DMA drivers. Currently there are two types of DMA driver for Samsung SoCs. The one is S3C-DMA for S3C SoCs and the other is PL330-DMA for S5P SoCs. This patch provides funcion pointers for common DMA operations to DMA client driver like SPI and Audio. It makes DMA client drivers support multi-platform. In addition, this common DMA operations implement the shared actions that are needed for DMA client driver. For example shared actions are filter() function for dma_request_channel() and parameter passing for device_prep_slave_sg(). Signed-off-by: Boojin Kim <boojin.kim@samsung.com> Acked-by: Linus Walleij <linus.walleij@linaro.org> Acked-by: Vinod Koul <vinod.koul@intel.com> Signed-off-by: Kukjin Kim <kgene.kim@samsung.com> Signed-off-by: Vinod Koul <vinod.koul@intel.com>
64 lines
1.5 KiB
C
64 lines
1.5 KiB
C
/* arch/arm/plat-samsung/include/plat/dma-ops.h
|
|
*
|
|
* Copyright (c) 2011 Samsung Electronics Co., Ltd.
|
|
* http://www.samsung.com
|
|
*
|
|
* Samsung DMA support
|
|
*
|
|
* This program is free software; you can redistribute it and/or modify
|
|
* it under the terms of the GNU General Public License version 2 as
|
|
* published by the Free Software Foundation.
|
|
*/
|
|
|
|
#ifndef __SAMSUNG_DMA_OPS_H_
|
|
#define __SAMSUNG_DMA_OPS_H_ __FILE__
|
|
|
|
#include <linux/dmaengine.h>
|
|
|
|
struct samsung_dma_prep_info {
|
|
enum dma_transaction_type cap;
|
|
enum dma_data_direction direction;
|
|
dma_addr_t buf;
|
|
unsigned long period;
|
|
unsigned long len;
|
|
void (*fp)(void *data);
|
|
void *fp_param;
|
|
};
|
|
|
|
struct samsung_dma_info {
|
|
enum dma_transaction_type cap;
|
|
enum dma_data_direction direction;
|
|
enum dma_slave_buswidth width;
|
|
dma_addr_t fifo;
|
|
struct s3c2410_dma_client *client;
|
|
};
|
|
|
|
struct samsung_dma_ops {
|
|
unsigned (*request)(enum dma_ch ch, struct samsung_dma_info *info);
|
|
int (*release)(unsigned ch, struct s3c2410_dma_client *client);
|
|
int (*prepare)(unsigned ch, struct samsung_dma_prep_info *info);
|
|
int (*trigger)(unsigned ch);
|
|
int (*started)(unsigned ch);
|
|
int (*flush)(unsigned ch);
|
|
int (*stop)(unsigned ch);
|
|
};
|
|
|
|
extern void *samsung_dmadev_get_ops(void);
|
|
extern void *s3c_dma_get_ops(void);
|
|
|
|
static inline void *__samsung_dma_get_ops(void)
|
|
{
|
|
if (samsung_dma_is_dmadev())
|
|
return samsung_dmadev_get_ops();
|
|
else
|
|
return s3c_dma_get_ops();
|
|
}
|
|
|
|
/*
|
|
* samsung_dma_get_ops
|
|
* get the set of samsung dma operations
|
|
*/
|
|
#define samsung_dma_get_ops() __samsung_dma_get_ops()
|
|
|
|
#endif /* __SAMSUNG_DMA_OPS_H_ */
|