/* Driver for Realtek driver-based card reader
 *
 * Copyright(c) 2009-2013 Realtek Semiconductor Corp. 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 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_COMMON_H
#define __RTSX_COMMON_H

#define DRV_NAME_RTSX_PCI		"rtsx_pci"
#define DRV_NAME_RTSX_PCI_SDMMC		"rtsx_pci_sdmmc"
#define DRV_NAME_RTSX_PCI_MS		"rtsx_pci_ms"

#define RTSX_REG_PAIR(addr, val)	(((u32)(addr) << 16) | (u8)(val))

#define RTSX_SSC_DEPTH_4M		0x01
#define RTSX_SSC_DEPTH_2M		0x02
#define RTSX_SSC_DEPTH_1M		0x03
#define RTSX_SSC_DEPTH_500K		0x04
#define RTSX_SSC_DEPTH_250K		0x05

#define RTSX_SD_CARD			0
#define RTSX_MS_CARD			1

#define CLK_TO_DIV_N			0
#define DIV_N_TO_CLK			1

struct platform_device;

struct rtsx_slot {
	struct platform_device	*p_dev;
	void			(*card_event)(struct platform_device *p_dev);
};

#endif
