mirror of
https://github.com/AetherDroid/android_kernel_samsung_on5xelte.git
synced 2025-09-08 09:08:05 -04:00
Fixed MTP to work with TWRP
This commit is contained in:
commit
f6dfaef42e
50820 changed files with 20846062 additions and 0 deletions
183
include/linux/dma/dma-pl330.h
Normal file
183
include/linux/dma/dma-pl330.h
Normal file
|
@ -0,0 +1,183 @@
|
|||
/*
|
||||
* Copyright (C) 2010 Samsung Electronics Co. Ltd.
|
||||
* Jaswinder Singh <jassi.brar@samsung.com>
|
||||
*
|
||||
* This program is free software; you can redistribute it and/or modify
|
||||
* it under the terms of the GNU General Public License as published by
|
||||
* the Free Software Foundation; either version 2 of the License, or
|
||||
* (at your option) any later version.
|
||||
*/
|
||||
|
||||
#ifndef __DMA_PL330_H_
|
||||
#define __DMA_PL330_H_ __FILE__
|
||||
|
||||
/*
|
||||
* PL330 can assign any channel to communicate with
|
||||
* any of the peripherals attched to the DMAC.
|
||||
* For the sake of consistency across client drivers,
|
||||
* We keep the channel names unchanged and only add
|
||||
* missing peripherals are added.
|
||||
* Order is not important since DMA PL330 API driver
|
||||
* use these just as IDs.
|
||||
*/
|
||||
enum dma_ch {
|
||||
DMACH_UART0_RX = 0,
|
||||
DMACH_UART0_TX,
|
||||
DMACH_UART1_RX,
|
||||
DMACH_UART1_TX,
|
||||
DMACH_UART2_RX,
|
||||
DMACH_UART2_TX,
|
||||
DMACH_UART3_RX,
|
||||
DMACH_UART3_TX,
|
||||
DMACH_UART4_RX,
|
||||
DMACH_UART4_TX,
|
||||
DMACH_UART5_RX,
|
||||
DMACH_UART5_TX,
|
||||
DMACH_USI_RX,
|
||||
DMACH_USI_TX,
|
||||
DMACH_IRDA,
|
||||
DMACH_I2S0_RX,
|
||||
DMACH_I2S0_TX,
|
||||
DMACH_I2S0S_TX,
|
||||
DMACH_I2S1_RX,
|
||||
DMACH_I2S1_TX,
|
||||
DMACH_I2S2_RX,
|
||||
DMACH_I2S2_TX,
|
||||
DMACH_SPI0_RX,
|
||||
DMACH_SPI0_TX,
|
||||
DMACH_SPI1_RX,
|
||||
DMACH_SPI1_TX,
|
||||
DMACH_SPI2_RX,
|
||||
DMACH_SPI2_TX,
|
||||
DMACH_AC97_MICIN,
|
||||
DMACH_AC97_PCMIN,
|
||||
DMACH_AC97_PCMOUT,
|
||||
DMACH_EXTERNAL,
|
||||
DMACH_PWM,
|
||||
DMACH_SPDIF,
|
||||
DMACH_HSI_RX,
|
||||
DMACH_HSI_TX,
|
||||
DMACH_PCM0_TX,
|
||||
DMACH_PCM0_RX,
|
||||
DMACH_PCM1_TX,
|
||||
DMACH_PCM1_RX,
|
||||
DMACH_PCM2_TX,
|
||||
DMACH_PCM2_RX,
|
||||
DMACH_MSM_REQ3,
|
||||
DMACH_MSM_REQ2,
|
||||
DMACH_MSM_REQ1,
|
||||
DMACH_MSM_REQ0,
|
||||
DMACH_SLIMBUS0_RX,
|
||||
DMACH_SLIMBUS0_TX,
|
||||
DMACH_SLIMBUS0AUX_RX,
|
||||
DMACH_SLIMBUS0AUX_TX,
|
||||
DMACH_SLIMBUS1_RX,
|
||||
DMACH_SLIMBUS1_TX,
|
||||
DMACH_SLIMBUS2_RX,
|
||||
DMACH_SLIMBUS2_TX,
|
||||
DMACH_SLIMBUS3_RX,
|
||||
DMACH_SLIMBUS3_TX,
|
||||
DMACH_SLIMBUS4_RX,
|
||||
DMACH_SLIMBUS4_TX,
|
||||
DMACH_SLIMBUS5_RX,
|
||||
DMACH_SLIMBUS5_TX,
|
||||
DMACH_MIPI_HSI0,
|
||||
DMACH_MIPI_HSI1,
|
||||
DMACH_MIPI_HSI2,
|
||||
DMACH_MIPI_HSI3,
|
||||
DMACH_MIPI_HSI4,
|
||||
DMACH_MIPI_HSI5,
|
||||
DMACH_MIPI_HSI6,
|
||||
DMACH_MIPI_HSI7,
|
||||
DMACH_DISP1,
|
||||
DMACH_MTOM_0,
|
||||
DMACH_MTOM_1,
|
||||
DMACH_MTOM_2,
|
||||
DMACH_MTOM_3,
|
||||
DMACH_MTOM_4,
|
||||
DMACH_MTOM_5,
|
||||
DMACH_MTOM_6,
|
||||
DMACH_MTOM_7,
|
||||
/* END Marker, also used to denote a reserved channel */
|
||||
DMACH_MAX,
|
||||
};
|
||||
|
||||
struct s3c2410_dma_client {
|
||||
char *name;
|
||||
};
|
||||
|
||||
static inline bool samsung_dma_has_circular(void)
|
||||
{
|
||||
return true;
|
||||
}
|
||||
|
||||
static inline bool samsung_dma_is_dmadev(void)
|
||||
{
|
||||
return true;
|
||||
}
|
||||
|
||||
static inline bool samsung_dma_has_infiniteloop(void)
|
||||
{
|
||||
return true;
|
||||
}
|
||||
|
||||
#include <linux/dmaengine.h>
|
||||
|
||||
struct samsung_dma_req {
|
||||
enum dma_transaction_type cap;
|
||||
struct s3c2410_dma_client *client;
|
||||
};
|
||||
|
||||
struct samsung_dma_prep {
|
||||
enum dma_transaction_type cap;
|
||||
enum dma_transfer_direction direction;
|
||||
dma_addr_t buf;
|
||||
unsigned long period;
|
||||
unsigned long len;
|
||||
void (*fp)(void *data);
|
||||
void *fp_param;
|
||||
unsigned int infiniteloop;
|
||||
};
|
||||
|
||||
struct samsung_dma_config {
|
||||
enum dma_transfer_direction direction;
|
||||
enum dma_slave_buswidth width;
|
||||
u32 maxburst;
|
||||
dma_addr_t fifo;
|
||||
};
|
||||
|
||||
struct samsung_dma_ops {
|
||||
unsigned long(*request)(enum dma_ch ch, struct samsung_dma_req *param,
|
||||
struct device *dev, char *ch_name);
|
||||
int (*release)(unsigned long ch, void *param);
|
||||
int (*config)(unsigned long ch, struct samsung_dma_config *param);
|
||||
int (*prepare)(unsigned long ch, struct samsung_dma_prep *param);
|
||||
int (*trigger)(unsigned long ch);
|
||||
int (*started)(unsigned long ch);
|
||||
int (*getposition)(unsigned long ch, dma_addr_t *src, dma_addr_t *dst);
|
||||
int (*flush)(unsigned long ch);
|
||||
int (*stop)(unsigned long 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
|
||||
*/
|
||||
#ifdef CONFIG_SAMSUNG_DMADEV
|
||||
#define samsung_dma_get_ops() __samsung_dma_get_ops()
|
||||
#else
|
||||
#define samsung_dma_get_ops() NULL
|
||||
#endif
|
||||
|
||||
#endif /* __DMA_PL330_H_ */
|
64
include/linux/dma/dw.h
Normal file
64
include/linux/dma/dw.h
Normal file
|
@ -0,0 +1,64 @@
|
|||
/*
|
||||
* Driver for the Synopsys DesignWare DMA Controller
|
||||
*
|
||||
* Copyright (C) 2007 Atmel Corporation
|
||||
* Copyright (C) 2010-2011 ST Microelectronics
|
||||
* Copyright (C) 2014 Intel Corporation
|
||||
*
|
||||
* 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 _DMA_DW_H
|
||||
#define _DMA_DW_H
|
||||
|
||||
#include <linux/clk.h>
|
||||
#include <linux/device.h>
|
||||
#include <linux/dmaengine.h>
|
||||
|
||||
#include <linux/platform_data/dma-dw.h>
|
||||
|
||||
struct dw_dma;
|
||||
|
||||
/**
|
||||
* struct dw_dma_chip - representation of DesignWare DMA controller hardware
|
||||
* @dev: struct device of the DMA controller
|
||||
* @irq: irq line
|
||||
* @regs: memory mapped I/O space
|
||||
* @clk: hclk clock
|
||||
* @dw: struct dw_dma that is filed by dw_dma_probe()
|
||||
*/
|
||||
struct dw_dma_chip {
|
||||
struct device *dev;
|
||||
int irq;
|
||||
void __iomem *regs;
|
||||
struct clk *clk;
|
||||
struct dw_dma *dw;
|
||||
};
|
||||
|
||||
/* Export to the platform drivers */
|
||||
int dw_dma_probe(struct dw_dma_chip *chip, struct dw_dma_platform_data *pdata);
|
||||
int dw_dma_remove(struct dw_dma_chip *chip);
|
||||
|
||||
/* DMA API extensions */
|
||||
struct dw_desc;
|
||||
|
||||
struct dw_cyclic_desc {
|
||||
struct dw_desc **desc;
|
||||
unsigned long periods;
|
||||
void (*period_callback)(void *param);
|
||||
void *period_callback_param;
|
||||
};
|
||||
|
||||
struct dw_cyclic_desc *dw_dma_cyclic_prep(struct dma_chan *chan,
|
||||
dma_addr_t buf_addr, size_t buf_len, size_t period_len,
|
||||
enum dma_transfer_direction direction);
|
||||
void dw_dma_cyclic_free(struct dma_chan *chan);
|
||||
int dw_dma_cyclic_start(struct dma_chan *chan);
|
||||
void dw_dma_cyclic_stop(struct dma_chan *chan);
|
||||
|
||||
dma_addr_t dw_dma_get_src_addr(struct dma_chan *chan);
|
||||
|
||||
dma_addr_t dw_dma_get_dst_addr(struct dma_chan *chan);
|
||||
|
||||
#endif /* _DMA_DW_H */
|
177
include/linux/dma/ipu-dma.h
Normal file
177
include/linux/dma/ipu-dma.h
Normal file
|
@ -0,0 +1,177 @@
|
|||
/*
|
||||
* Copyright (C) 2008
|
||||
* Guennadi Liakhovetski, DENX Software Engineering, <lg@denx.de>
|
||||
*
|
||||
* Copyright (C) 2005-2007 Freescale Semiconductor, Inc.
|
||||
*
|
||||
* 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 __LINUX_DMA_IPU_DMA_H
|
||||
#define __LINUX_DMA_IPU_DMA_H
|
||||
|
||||
#include <linux/types.h>
|
||||
#include <linux/dmaengine.h>
|
||||
|
||||
/* IPU DMA Controller channel definitions. */
|
||||
enum ipu_channel {
|
||||
IDMAC_IC_0 = 0, /* IC (encoding task) to memory */
|
||||
IDMAC_IC_1 = 1, /* IC (viewfinder task) to memory */
|
||||
IDMAC_ADC_0 = 1,
|
||||
IDMAC_IC_2 = 2,
|
||||
IDMAC_ADC_1 = 2,
|
||||
IDMAC_IC_3 = 3,
|
||||
IDMAC_IC_4 = 4,
|
||||
IDMAC_IC_5 = 5,
|
||||
IDMAC_IC_6 = 6,
|
||||
IDMAC_IC_7 = 7, /* IC (sensor data) to memory */
|
||||
IDMAC_IC_8 = 8,
|
||||
IDMAC_IC_9 = 9,
|
||||
IDMAC_IC_10 = 10,
|
||||
IDMAC_IC_11 = 11,
|
||||
IDMAC_IC_12 = 12,
|
||||
IDMAC_IC_13 = 13,
|
||||
IDMAC_SDC_0 = 14, /* Background synchronous display data */
|
||||
IDMAC_SDC_1 = 15, /* Foreground data (overlay) */
|
||||
IDMAC_SDC_2 = 16,
|
||||
IDMAC_SDC_3 = 17,
|
||||
IDMAC_ADC_2 = 18,
|
||||
IDMAC_ADC_3 = 19,
|
||||
IDMAC_ADC_4 = 20,
|
||||
IDMAC_ADC_5 = 21,
|
||||
IDMAC_ADC_6 = 22,
|
||||
IDMAC_ADC_7 = 23,
|
||||
IDMAC_PF_0 = 24,
|
||||
IDMAC_PF_1 = 25,
|
||||
IDMAC_PF_2 = 26,
|
||||
IDMAC_PF_3 = 27,
|
||||
IDMAC_PF_4 = 28,
|
||||
IDMAC_PF_5 = 29,
|
||||
IDMAC_PF_6 = 30,
|
||||
IDMAC_PF_7 = 31,
|
||||
};
|
||||
|
||||
/* Order significant! */
|
||||
enum ipu_channel_status {
|
||||
IPU_CHANNEL_FREE,
|
||||
IPU_CHANNEL_INITIALIZED,
|
||||
IPU_CHANNEL_READY,
|
||||
IPU_CHANNEL_ENABLED,
|
||||
};
|
||||
|
||||
#define IPU_CHANNELS_NUM 32
|
||||
|
||||
enum pixel_fmt {
|
||||
/* 1 byte */
|
||||
IPU_PIX_FMT_GENERIC,
|
||||
IPU_PIX_FMT_RGB332,
|
||||
IPU_PIX_FMT_YUV420P,
|
||||
IPU_PIX_FMT_YUV422P,
|
||||
IPU_PIX_FMT_YUV420P2,
|
||||
IPU_PIX_FMT_YVU422P,
|
||||
/* 2 bytes */
|
||||
IPU_PIX_FMT_RGB565,
|
||||
IPU_PIX_FMT_RGB666,
|
||||
IPU_PIX_FMT_BGR666,
|
||||
IPU_PIX_FMT_YUYV,
|
||||
IPU_PIX_FMT_UYVY,
|
||||
/* 3 bytes */
|
||||
IPU_PIX_FMT_RGB24,
|
||||
IPU_PIX_FMT_BGR24,
|
||||
/* 4 bytes */
|
||||
IPU_PIX_FMT_GENERIC_32,
|
||||
IPU_PIX_FMT_RGB32,
|
||||
IPU_PIX_FMT_BGR32,
|
||||
IPU_PIX_FMT_ABGR32,
|
||||
IPU_PIX_FMT_BGRA32,
|
||||
IPU_PIX_FMT_RGBA32,
|
||||
};
|
||||
|
||||
enum ipu_color_space {
|
||||
IPU_COLORSPACE_RGB,
|
||||
IPU_COLORSPACE_YCBCR,
|
||||
IPU_COLORSPACE_YUV
|
||||
};
|
||||
|
||||
/*
|
||||
* Enumeration of IPU rotation modes
|
||||
*/
|
||||
enum ipu_rotate_mode {
|
||||
/* Note the enum values correspond to BAM value */
|
||||
IPU_ROTATE_NONE = 0,
|
||||
IPU_ROTATE_VERT_FLIP = 1,
|
||||
IPU_ROTATE_HORIZ_FLIP = 2,
|
||||
IPU_ROTATE_180 = 3,
|
||||
IPU_ROTATE_90_RIGHT = 4,
|
||||
IPU_ROTATE_90_RIGHT_VFLIP = 5,
|
||||
IPU_ROTATE_90_RIGHT_HFLIP = 6,
|
||||
IPU_ROTATE_90_LEFT = 7,
|
||||
};
|
||||
|
||||
/*
|
||||
* Enumeration of DI ports for ADC.
|
||||
*/
|
||||
enum display_port {
|
||||
DISP0,
|
||||
DISP1,
|
||||
DISP2,
|
||||
DISP3
|
||||
};
|
||||
|
||||
struct idmac_video_param {
|
||||
unsigned short in_width;
|
||||
unsigned short in_height;
|
||||
uint32_t in_pixel_fmt;
|
||||
unsigned short out_width;
|
||||
unsigned short out_height;
|
||||
uint32_t out_pixel_fmt;
|
||||
unsigned short out_stride;
|
||||
bool graphics_combine_en;
|
||||
bool global_alpha_en;
|
||||
bool key_color_en;
|
||||
enum display_port disp;
|
||||
unsigned short out_left;
|
||||
unsigned short out_top;
|
||||
};
|
||||
|
||||
/*
|
||||
* Union of initialization parameters for a logical channel. So far only video
|
||||
* parameters are used.
|
||||
*/
|
||||
union ipu_channel_param {
|
||||
struct idmac_video_param video;
|
||||
};
|
||||
|
||||
struct idmac_tx_desc {
|
||||
struct dma_async_tx_descriptor txd;
|
||||
struct scatterlist *sg; /* scatterlist for this */
|
||||
unsigned int sg_len; /* tx-descriptor. */
|
||||
struct list_head list;
|
||||
};
|
||||
|
||||
struct idmac_channel {
|
||||
struct dma_chan dma_chan;
|
||||
dma_cookie_t completed; /* last completed cookie */
|
||||
union ipu_channel_param params;
|
||||
enum ipu_channel link; /* input channel, linked to the output */
|
||||
enum ipu_channel_status status;
|
||||
void *client; /* Only one client per channel */
|
||||
unsigned int n_tx_desc;
|
||||
struct idmac_tx_desc *desc; /* allocated tx-descriptors */
|
||||
struct scatterlist *sg[2]; /* scatterlist elements in buffer-0 and -1 */
|
||||
struct list_head free_list; /* free tx-descriptors */
|
||||
struct list_head queue; /* queued tx-descriptors */
|
||||
spinlock_t lock; /* protects sg[0,1], queue */
|
||||
struct mutex chan_mutex; /* protects status, cookie, free_list */
|
||||
bool sec_chan_en;
|
||||
int active_buffer;
|
||||
unsigned int eof_irq;
|
||||
char eof_name[16]; /* EOF IRQ name for request_irq() */
|
||||
};
|
||||
|
||||
#define to_tx_desc(tx) container_of(tx, struct idmac_tx_desc, txd)
|
||||
#define to_idmac_chan(c) container_of(c, struct idmac_channel, dma_chan)
|
||||
|
||||
#endif /* __LINUX_DMA_IPU_DMA_H */
|
15
include/linux/dma/mmp-pdma.h
Normal file
15
include/linux/dma/mmp-pdma.h
Normal file
|
@ -0,0 +1,15 @@
|
|||
#ifndef _MMP_PDMA_H_
|
||||
#define _MMP_PDMA_H_
|
||||
|
||||
struct dma_chan;
|
||||
|
||||
#ifdef CONFIG_MMP_PDMA
|
||||
bool mmp_pdma_filter_fn(struct dma_chan *chan, void *param);
|
||||
#else
|
||||
static inline bool mmp_pdma_filter_fn(struct dma_chan *chan, void *param)
|
||||
{
|
||||
return false;
|
||||
}
|
||||
#endif
|
||||
|
||||
#endif /* _MMP_PDMA_H_ */
|
Loading…
Add table
Add a link
Reference in a new issue