2018-08-22 00:02:17 +02:00
/* SPDX-License-Identifier: GPL-2.0 */
2017-05-10 11:25:28 +02:00
/*
* Renesas Mobile SDHI
*
* Copyright ( C ) 2017 Horms Solutions Ltd . , Simon Horman
2019-03-14 23:54:41 +01:00
* Copyright ( C ) 2017 - 19 Renesas Electronics Corporation
2017-05-10 11:25:28 +02:00
*/
# ifndef RENESAS_SDHI_H
# define RENESAS_SDHI_H
2017-05-10 11:25:30 +02:00
# include <linux/platform_device.h>
2017-05-10 11:25:28 +02:00
# include "tmio_mmc.h"
2017-05-10 11:25:30 +02:00
struct renesas_sdhi_scc {
unsigned long clk_rate ; /* clock rate for SDR104 */
u32 tap ; /* sampling clock position for SDR104 */
2019-02-08 20:30:02 +01:00
u32 tap_hs400 ; /* sampling clock position for HS400 */
2017-05-10 11:25:30 +02:00
} ;
struct renesas_sdhi_of_data {
unsigned long tmio_flags ;
u32 tmio_ocr_mask ;
unsigned long capabilities ;
unsigned long capabilities2 ;
enum dma_slave_buswidth dma_buswidth ;
dma_addr_t dma_rx_offset ;
2017-06-16 18:11:03 +02:00
unsigned int bus_shift ;
2017-05-10 11:25:30 +02:00
int scc_offset ;
struct renesas_sdhi_scc * taps ;
int taps_num ;
2017-06-21 16:00:27 +02:00
unsigned int max_blk_count ;
unsigned short max_segs ;
2017-05-10 11:25:30 +02:00
} ;
2017-11-25 01:24:47 +09:00
struct tmio_mmc_dma {
enum dma_slave_buswidth dma_buswidth ;
bool ( * filter ) ( struct dma_chan * chan , void * arg ) ;
void ( * enable ) ( struct tmio_mmc_host * host , bool enable ) ;
2017-11-25 01:24:48 +09:00
struct completion dma_dataend ;
struct tasklet_struct dma_complete ;
2017-11-25 01:24:47 +09:00
} ;
struct renesas_sdhi {
struct clk * clk ;
struct clk * clk_cd ;
struct tmio_mmc_data mmc_data ;
struct tmio_mmc_dma dma_priv ;
struct pinctrl * pinctrl ;
struct pinctrl_state * pins_default , * pins_uhs ;
void __iomem * scc_ctl ;
2017-11-25 01:24:49 +09:00
u32 scc_tappos ;
2019-02-08 20:30:02 +01:00
u32 scc_tappos_hs400 ;
2017-11-25 01:24:47 +09:00
} ;
# define host_to_priv(host) \
container_of ( ( host ) - > pdata , struct renesas_sdhi , mmc_data )
2017-05-10 11:25:30 +02:00
int renesas_sdhi_probe ( struct platform_device * pdev ,
2017-06-16 18:11:04 +02:00
const struct tmio_mmc_dma_ops * dma_ops ) ;
2017-05-10 11:25:30 +02:00
int renesas_sdhi_remove ( struct platform_device * pdev ) ;
2017-05-10 11:25:28 +02:00
# endif