/* * linux/drivers/mmc/host/msm_sdcc_dml.h - Qualcomm SDCC DML driver * header file * * Copyright (c) 2011, The Linux Foundation. All rights reserved. * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License version 2 and * only version 2 as published by the Free Software Foundation. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * */ #ifndef _MSM_SDCC_DML_H #define _MSM_SDCC_DML_H #include #include #include "msm_sdcc.h" #ifdef CONFIG_MMC_MSM_SPS_SUPPORT /** * Initialize DML HW connected with SDCC core * * This function initialize DML HW. * * This function should only be called once * typically during driver probe. * * @host - Pointer to sdcc host structure * * @return - 0 if successful else negative value. * */ int msmsdcc_dml_init(struct msmsdcc_host *host); /** * Start data transfer. * * This function configure DML HW registers with * data transfer direction and data transfer size. * * This function should be called after submitting * data transfer request to SPS HW and before kick * starting data transfer in SDCC core. * * @host - Pointer to sdcc host structure * @data - Pointer to mmc_data structure * */ void msmsdcc_dml_start_xfer(struct msmsdcc_host *host, struct mmc_data *data); /** * Checks if DML HW is busy or not? * * @host - Pointer to sdcc host structure * * @return - 1 if DML HW is busy with data transfer * 0 if DML HW is IDLE. * */ bool msmsdcc_is_dml_busy(struct msmsdcc_host *host); /** * Soft reset DML HW * * This function give soft reset to DML HW. * * This function should be called to reset DML HW * if data transfer error is detected. * * @host - Pointer to sdcc host structure * */ void msmsdcc_dml_reset(struct msmsdcc_host *host); /** * Deinitialize DML HW connected with SDCC core * * This function resets DML HW and unmap DML * register region. * * This function should only be called once * typically during driver remove. * * @host - Pointer to sdcc host structure * */ void msmsdcc_dml_exit(struct msmsdcc_host *host); #else static inline int msmsdcc_dml_init(struct msmsdcc_host *host) { return 0; } static inline int msmsdcc_dml_start_xfer(struct msmsdcc_host *host, struct mmc_data *data) { return 0; } static inline bool msmsdcc_is_dml_busy( struct msmsdcc_host *host) { return 0; } static inline void msmsdcc_dml_reset(struct msmsdcc_host *host) { } static inline void msmsdcc_dml_exit(struct msmsdcc_host *host) { } #endif /* CONFIG_MMC_MSM_SPS_SUPPORT */ #endif /* _MSM_SDCC_DML_H */