blob: 3580311cf5e7d0f328ccb7f4d9e4fe6ca58c6c48 [file] [log] [blame]
/* SPDX-License-Identifier: (GPL-2.0+ OR MIT) */
/*
* Copyright (c) 2019 Amlogic, Inc. All rights reserved.
*/
#ifndef __MESON_GX_MMC_H__
#define __MESON_GX_MMC_H__
#include <mmc.h>
#include <linux/bitops.h>
enum meson_gx_mmc_compatible {
MMC_COMPATIBLE_GX,
MMC_COMPATIBLE_SM1,
};
#define SDIO_PORT_A 0
#define SDIO_PORT_B 1
#define SDIO_PORT_C 2
#define SD_EMMC_CLKSRC_24M 24000000 /* 24 MHz */
#define SD_EMMC_CLKSRC_DIV2 1000000000 /* 1 GHz */
struct meson_host {
struct mmc *mmc;
uint is_in;
uint is_sduart;
uint is_tuning;
uint card_type;
uint src_clk;
uint ignore_desc_busy;
uint nwr_cnt;
struct clk core;
struct clk xtal;
struct clk div2;
struct clk mux;
struct clk div;
struct clk gate;
struct gpio_desc gpio_cd;
struct gpio_desc gpio_reset;
char *blk_test;
char *desc_buf;
unsigned char timing;
};
struct sd_emmc_desc_info {
u32 cmd_info;
u32 cmd_arg;
u32 data_addr;
u32 resp_addr;
};
/* unknown */
#define CARD_TYPE_UNKNOWN 0
/* MMC card */
#define CARD_TYPE_MMC 1
/* SD card */
#define CARD_TYPE_SD 2
/* SDIO card */
#define CARD_TYPE_SDIO 3
/* SD combo (IO+mem) card */
#define CARD_TYPE_SD_COMBO 4
/* NON sdio device (means SD/MMC card) */
#define CARD_TYPE_NON_SDIO 5
#define aml_card_type_unknown(c) ((c)->card_type == CARD_TYPE_UNKNOWN)
#define aml_card_type_mmc(c) ((c)->card_type == CARD_TYPE_MMC)
#define aml_card_type_sd(c) ((c)->card_type == CARD_TYPE_SD)
#define aml_card_type_sdio(c) ((c)->card_type == CARD_TYPE_SDIO)
#define aml_card_type_non_sdio(c) ((c)->card_type == CARD_TYPE_NON_SDIO)
struct meson_mmc_plat {
struct mmc_config cfg;
struct mmc mmc;
void *regbase;
};
#endif