2012-11-09 16:53:33 +04:00
/* Driver for Realtek PCI-Express card reader
*
2013-08-20 10:18:56 +04:00
* Copyright ( c ) 2009 - 2013 Realtek Semiconductor Corp . All rights reserved .
2012-11-09 16:53:33 +04:00
*
* 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 , or ( at your option ) any
* later version .
*
* 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 .
*
* You should have received a copy of the GNU General Public License along
* with this program ; if not , see < http : //www.gnu.org/licenses/>.
*
* Author :
* Wei WANG < wei_wang @ realsil . com . cn >
*/
# ifndef __RTSX_PCR_H
# define __RTSX_PCR_H
# include <linux/mfd/rtsx_pci.h>
2013-01-29 11:21:36 +04:00
# define MIN_DIV_N_PCR 80
# define MAX_DIV_N_PCR 208
2015-06-29 04:19:39 +03:00
# define RTS522A_PM_CTRL3 0xFF7E
2015-02-25 08:50:14 +03:00
# define RTS524A_PME_FORCE_CTL 0xFF78
# define RTS524A_PM_CTRL3 0xFF7E
int __rtsx_pci_write_phy_register ( struct rtsx_pcr * pcr , u8 addr , u16 val ) ;
int __rtsx_pci_read_phy_register ( struct rtsx_pcr * pcr , u8 addr , u16 * val ) ;
2012-11-09 16:53:33 +04:00
void rts5209_init_params ( struct rtsx_pcr * pcr ) ;
void rts5229_init_params ( struct rtsx_pcr * pcr ) ;
void rtl8411_init_params ( struct rtsx_pcr * pcr ) ;
2013-12-18 06:03:13 +04:00
void rtl8402_init_params ( struct rtsx_pcr * pcr ) ;
2013-02-04 11:45:59 +04:00
void rts5227_init_params ( struct rtsx_pcr * pcr ) ;
2015-06-29 04:19:39 +03:00
void rts522a_init_params ( struct rtsx_pcr * pcr ) ;
2013-04-11 06:43:40 +04:00
void rts5249_init_params ( struct rtsx_pcr * pcr ) ;
2015-02-25 08:50:14 +03:00
void rts524a_init_params ( struct rtsx_pcr * pcr ) ;
2015-02-25 08:50:15 +03:00
void rts525a_init_params ( struct rtsx_pcr * pcr ) ;
2013-04-19 17:52:42 +04:00
void rtl8411b_init_params ( struct rtsx_pcr * pcr ) ;
2012-11-09 16:53:33 +04:00
2013-08-20 10:18:51 +04:00
static inline u8 map_sd_drive ( int idx )
{
u8 sd_drive [ 4 ] = {
0x01 , /* Type D */
0x02 , /* Type C */
0x05 , /* Type A */
0x03 /* Type B */
} ;
return sd_drive [ idx ] ;
}
# define rtsx_vendor_setting_valid(reg) (!((reg) & 0x1000000))
# define rts5209_vendor_setting1_valid(reg) (!((reg) & 0x80))
# define rts5209_vendor_setting2_valid(reg) ((reg) & 0x80)
# define rtsx_reg_to_aspm(reg) (((reg) >> 28) & 0x03)
# define rtsx_reg_to_sd30_drive_sel_1v8(reg) (((reg) >> 26) & 0x03)
# define rtsx_reg_to_sd30_drive_sel_3v3(reg) (((reg) >> 5) & 0x03)
# define rtsx_reg_to_card_drive_sel(reg) ((((reg) >> 25) & 0x01) << 6)
# define rtsx_reg_check_reverse_socket(reg) ((reg) & 0x4000)
# define rts5209_reg_to_aspm(reg) (((reg) >> 5) & 0x03)
# define rts5209_reg_check_ms_pmos(reg) (!((reg) & 0x08))
# define rts5209_reg_to_sd30_drive_sel_1v8(reg) (((reg) >> 3) & 0x07)
# define rts5209_reg_to_sd30_drive_sel_3v3(reg) ((reg) & 0x07)
# define rts5209_reg_to_card_drive_sel(reg) ((reg) >> 8)
# define rtl8411_reg_to_sd30_drive_sel_3v3(reg) (((reg) >> 5) & 0x07)
# define rtl8411b_reg_to_sd30_drive_sel_3v3(reg) ((reg) & 0x03)
2013-12-18 06:03:12 +04:00
# define set_pull_ctrl_tables(pcr, __device) \
do { \
pcr - > sd_pull_ctl_enable_tbl = __device # # _sd_pull_ctl_enable_tbl ; \
pcr - > sd_pull_ctl_disable_tbl = __device # # _sd_pull_ctl_disable_tbl ; \
pcr - > ms_pull_ctl_enable_tbl = __device # # _ms_pull_ctl_enable_tbl ; \
pcr - > ms_pull_ctl_disable_tbl = __device # # _ms_pull_ctl_disable_tbl ; \
} while ( 0 )
2014-10-10 09:58:44 +04:00
/* generic operations */
int rtsx_gops_pm_reset ( struct rtsx_pcr * pcr ) ;
2012-11-09 16:53:33 +04:00
# endif