blob: 8dfc5d3774fb92f4612e1f7808c3814e06b4732b [file] [log] [blame]
/* Copyright Statement:
*
* This software/firmware and related documentation ("MediaTek Software") are
* protected under relevant copyright laws. The information contained herein is
* confidential and proprietary to MediaTek Inc. and/or its licensors. Without
* the prior written permission of MediaTek inc. and/or its licensors, any
* reproduction, modification, use or disclosure of MediaTek Software, and
* information contained herein, in whole or in part, shall be strictly
* prohibited.
*
* SPDX-License-Identifier: MediaTekProprietary
* MediaTek Inc. (C) 2016. All rights reserved.
*
* BY OPENING THIS FILE, RECEIVER HEREBY UNEQUIVOCALLY ACKNOWLEDGES AND AGREES
* THAT THE SOFTWARE/FIRMWARE AND ITS DOCUMENTATIONS ("MEDIATEK SOFTWARE")
* RECEIVED FROM MEDIATEK AND/OR ITS REPRESENTATIVES ARE PROVIDED TO RECEIVER
* ON AN "AS-IS" BASIS ONLY. MEDIATEK EXPRESSLY DISCLAIMS ANY AND ALL
* WARRANTIES, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE IMPLIED
* WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE OR
* NONINFRINGEMENT. NEITHER DOES MEDIATEK PROVIDE ANY WARRANTY WHATSOEVER WITH
* RESPECT TO THE SOFTWARE OF ANY THIRD PARTY WHICH MAY BE USED BY,
* INCORPORATED IN, OR SUPPLIED WITH THE MEDIATEK SOFTWARE, AND RECEIVER AGREES
* TO LOOK ONLY TO SUCH THIRD PARTY FOR ANY WARRANTY CLAIM RELATING THERETO.
* RECEIVER EXPRESSLY ACKNOWLEDGES THAT IT IS RECEIVER'S SOLE RESPONSIBILITY TO
* OBTAIN FROM ANY THIRD PARTY ALL PROPER LICENSES CONTAINED IN MEDIATEK
* SOFTWARE. MEDIATEK SHALL ALSO NOT BE RESPONSIBLE FOR ANY MEDIATEK SOFTWARE
* RELEASES MADE TO RECEIVER'S SPECIFICATION OR TO CONFORM TO A PARTICULAR
* STANDARD OR OPEN FORUM. RECEIVER'S SOLE AND EXCLUSIVE REMEDY AND MEDIATEK'S
* ENTIRE AND CUMULATIVE LIABILITY WITH RESPECT TO THE MEDIATEK SOFTWARE
* RELEASED HEREUNDER WILL BE, AT MEDIATEK'S OPTION, TO REVISE OR REPLACE THE
* MEDIATEK SOFTWARE AT ISSUE, OR REFUND ANY SOFTWARE LICENSE FEES OR SERVICE
* CHARGE PAID BY RECEIVER TO MEDIATEK FOR SUCH MEDIATEK SOFTWARE AT ISSUE.
*
* The following software/firmware and/or related documentation ("MediaTek
* Software") have been modified by MediaTek Inc. All revisions are subject to
* any receiver's applicable license agreements with MediaTek Inc.
*/
#ifndef SD_MISC_H
#define SD_MISC_H
#ifdef __KERNEL__
#include <linux/bitops.h>
#include <linux/mmc/host.h>
#include <linux/mmc/card.h>
#include <linux/mmc/core.h>
#include <linux/mmc/mmc.h>
#include <linux/mmc/sd.h>
#endif
struct msdc_ioctl {
int opcode;
int host_num;
int iswrite;
int trans_type;
unsigned int total_size;
unsigned int address;
unsigned int *buffer;
int cmd_pu_driving;
int cmd_pd_driving;
int dat_pu_driving;
int dat_pd_driving;
int clk_pu_driving;
int clk_pd_driving;
int ds_pu_driving;
int ds_pd_driving;
int rst_pu_driving;
int rst_pd_driving;
int clock_freq;
int partition;
int hopping_bit;
int hopping_time;
int result;
int sd30_mode;
int sd30_max_current;
int sd30_drive;
int sd30_power_control;
};
/**************for msdc_ssc***********************/
#define AUDPLL_CTL_REG12 (0xF0007070)
#define AUDPLL_CTL_REG01 (0xF00071E0)
#define AUDPLL_CTL_REG02 (0xF100000C)
#define AUDPLL_TSEL_MASK (1792) /* MASK = 00000111 00000000 */
#define AUDPLL_TSEL_RESULT1 (0) /* REG = 00000000 00000000 30.5us */
#define AUDPLL_TSEL_RESULT2 (256) /* REG = 00000001 00000000 61.0us */
#define AUDPLL_TSEL_RESULT3 (512) /* REG = 00000010 00000000 122.1us */
#define AUDPLL_TSEL_RESULT4 (768) /* REG = 00000011 00000000 244.1us */
#define AUDPLL_TSEL_RESULT5 (1024) /* REG = 00000100 00000000 448.3us */
#define AUDPLL_BSEL_MASK (7) /* MASK = 00000000 00000111 */
#define AUDPLL_BSEL_RESULT0 (0) /* REG = 00000000 00000000 REG init val */
#define AUDPLL_BSEL_RESULT1 (1) /* REG = 00000000 00000001 2.26MHz */
#define AUDPLL_BSEL_RESULT2 (2) /* REG = 00000000 00000010 4.52MHz */
#define AUDPLL_BSEL_RESULT3 (4) /* REG = 00000000 00000100 9.04MHz */
#define SET_HOP_BIT_NONE (0)
#define SET_HOP_BIT1 (1)
#define SET_HOP_BIT2 (2)
#define SET_HOP_BIT3 (3)
#define SET_HOP_TIME0 (0)
#define SET_HOP_TIME1 (1)
#define SET_HOP_TIME2 (2)
#define SET_HOP_TIME3 (3)
#define SET_HOP_TIME4 (4)
/**************for msdc_ssc***********************/
#define MSDC_DRIVING_SETTING (0)
#define MSDC_CLOCK_FREQUENCY (1)
#define MSDC_SINGLE_READ_WRITE (2)
#define MSDC_MULTIPLE_READ_WRITE (3)
#define MSDC_GET_CID (4)
#define MSDC_GET_CSD (5)
#define MSDC_GET_EXCSD (6)
#define MSDC_ERASE_PARTITION (7)
#define MSDC_HOPPING_SETTING (8)
#define MSDC_REINIT_SDCARD _IOW('r', 9, int)
#define MSDC_SD30_MODE_SWITCH (10)
#define MSDC_GET_BOOTPART (11)
#define MSDC_SET_BOOTPART (12)
#define MSDC_GET_PARTSIZE (13)
#define MSDC_ERASE_SELECTED_AREA (0x20)
#define MSDC_CARD_DUNM_FUNC (0xff)
typedef enum {
USER_PARTITION = 0,
BOOT_PARTITION_1,
BOOT_PARTITION_2,
RPMB_PARTITION,
GP_PARTITION_1,
GP_PARTITION_2,
GP_PARTITION_3,
GP_PARTITION_4,
} PARTITON_ACCESS_T;
typedef enum {
SDHC_HIGHSPEED = 0, /* 0 Host supports HS mode */
UHS_SDR12, /* 1 Host supports UHS SDR12 mode */
UHS_SDR25, /* 2 Host supports UHS SDR25 mode */
UHS_SDR50, /* 3 Host supports UHS SDR50 mode */
UHS_SDR104, /* 4 Host supports UHS SDR104 mode */
UHS_DDR50, /* 5 Host supports UHS DDR50 mode */
} SD3_MODE;
typedef enum {
DRIVER_TYPE_A = 0, /* 0 Host supports Driver Type A */
DRIVER_TYPE_B, /* 1 Host supports Driver Type B */
DRIVER_TYPE_C, /* 2 Host supports Driver Type C */
DRIVER_TYPE_D, /* 3 Host supports Driver Type D */
} SD3_DRIVE;
typedef enum {
MAX_CURRENT_200 = 0, /* 0 Host max current limit is 200mA */
MAX_CURRENT_400, /* 1 Host max current limit is 400mA */
MAX_CURRENT_600, /* 2 Host max current limit is 600mA */
MAX_CURRENT_800, /* 3 Host max current limit is 800mA */
} SD3_MAX_CURRENT;
typedef enum {
SDXC_NO_POWER_CONTROL = 0, /* 0 Host not supports >150mA current at 3.3V /3.0V/1.8V */
SDXC_POWER_CONTROL, /* 1 Host supports >150mA current at 3.3V /3.0V/1.8V */
} SD3_POWER_CONTROL;
typedef enum {
DUMP_INTO_BOOT_CARD_IPANIC = 0,
DUMP_INTO_BOOT_CARD_KDUMP = 1,
DUMP_INTO_EXTERN_CARD = 2,
} DUMP_STORAGE_TYPE;
typedef enum {
EMMC_CARD_BOOT = 0,
SD_CARD_BOOT,
EMMC_CARD,
SD_CARD,
} STORAGE_TPYE;
#define EXT_CSD_BOOT_SIZE_MULT (226) /* R */
#define EXT_CSD_HC_ERASE_GRP_SIZE (224) /* RO */
#define EXT_CSD_HC_WP_GPR_SIZE (221) /* RO */
#define EXT_CSD_RPMB_SIZE_MULT (168) /* R */
#define EXT_CSD_GP1_SIZE_MULT (143) /* R/W 3 bytes */
#define EXT_CSD_GP2_SIZE_MULT (146) /* R/W 3 bytes */
#define EXT_CSD_GP3_SIZE_MULT (149) /* R/W 3 bytes */
#define EXT_CSD_GP4_SIZE_MULT (152) /* R/W 3 bytes */
#define EXT_CSD_PART_CFG (179) /* R/W/E & R/W/E_P */
#define EXT_CSD_CACHE_FLUSH (32)
#define EXT_CSD_CACHE_CTRL (33)
#define CAPACITY_2G (2 * 1024 * 1024 * 1024ULL)
typedef enum {
EMMC_BOOT_NO_EN = 0,
EMMC_BOOT1_EN,
EMMC_BOOT2_EN,
EMMC_BOOT_USER = 7,
EMMC_BOOT_END
} BOOT_PARTITION_EN;
#ifdef CONFIG_MTK_GPT_SCHEME_SUPPORT
typedef enum {
EMMC_PART_UNKNOWN=0
,EMMC_PART_BOOT1
,EMMC_PART_BOOT2
,EMMC_PART_RPMB
,EMMC_PART_GP1
,EMMC_PART_GP2
,EMMC_PART_GP3
,EMMC_PART_GP4
,EMMC_PART_USER
,EMMC_PART_END
} Region;
#endif
typedef enum {
CARD_INFO = 0,
DISK_INFO,
EMMC_USER_CAPACITY,
EMMC_CAPACITY,
EMMC_RESERVE,
} GET_STORAGE_INFO;
struct storage_info {
struct mmc_card *card;
struct gendisk *disk;
unsigned long long emmc_user_capacity;
unsigned long long emmc_capacity;
int emmc_reserve;
};
int msdc_get_info(STORAGE_TPYE storage_type, GET_STORAGE_INFO info_type, struct storage_info *info);
#endif /* end of SD_MISC_H */