mirror of https://github.com/OpenIPC/firmware.git
102 lines
3.1 KiB
Diff
102 lines
3.1 KiB
Diff
diff -drupN a/drivers/mmc/host/sdhci-ingenic.h b/drivers/mmc/host/sdhci-ingenic.h
|
|
--- a/drivers/mmc/host/sdhci-ingenic.h 1970-01-01 03:00:00.000000000 +0300
|
|
+++ b/drivers/mmc/host/sdhci-ingenic.h 2022-06-09 05:02:30.000000000 +0300
|
|
@@ -0,0 +1,97 @@
|
|
+#ifndef __SDHCI_INGENIC_H__
|
|
+#define __SDHCI_INGENIC_H__
|
|
+
|
|
+#include <soc/mmc.h>
|
|
+#include "ingenic_mmc_reg.h"
|
|
+enum cd_types {
|
|
+ SDHCI_INGENIC_CD_INTERNAL, /* use mmc internal CD line */
|
|
+ SDHCI_INGENIC_CD_GPIO, /* use external gpio pin for CD line */
|
|
+ SDHCI_INGENIC_CD_NONE, /* no CD line, use polling to detect card */
|
|
+ SDHCI_INGENIC_CD_PERMANENT, /* no CD line, card permanently wired to host */
|
|
+};
|
|
+
|
|
+
|
|
+#define LOW_ENABLE 0
|
|
+#define HIGH_ENABLE 1
|
|
+struct ingenic_mmc_pin {
|
|
+ short num;
|
|
+ short enable_level;
|
|
+};
|
|
+
|
|
+struct card_gpio {
|
|
+ struct ingenic_mmc_pin wp;
|
|
+ struct ingenic_mmc_pin cd;
|
|
+ struct ingenic_mmc_pin pwr;
|
|
+ struct ingenic_mmc_pin rst;
|
|
+};
|
|
+
|
|
+/**
|
|
+ * struct sdhci_ingenic_platdata() - Platform device data for ingenic SDHCI
|
|
+ * @max_width: The maximum number of data bits supported.
|
|
+ * @host_caps: Standard MMC host capabilities bit field.
|
|
+ * @host_caps2: The second standard MMC host capabilities bit field.
|
|
+ * @sdr_v18: External gpio pin switch voltage from 3.3V to 1.8V
|
|
+ * @cd_type: Type of Card Detection method (see cd_types enum above)
|
|
+ * @enable_cpm_rx_tunning: Manual adjustment cpm rx tunting
|
|
+ * @enable_cpm_tx_tunning: Manual adjustment cpm tx tunting
|
|
+ * @ext_cd_gpio_invert: invert values for external CD gpio line
|
|
+ * @cfg_gpio: Configure the GPIO for a specific card bit-width
|
|
+ *
|
|
+ * Initialisation data specific to either the machine or the platform
|
|
+ * for the device driver to use or call-back when configuring gpio or
|
|
+ * card speed information.
|
|
+ */
|
|
+struct sdhci_ingenic_pdata {
|
|
+ unsigned int host_caps;
|
|
+ unsigned int host_caps2;
|
|
+ unsigned short sdio_clk;
|
|
+ int sdr_v18;
|
|
+ unsigned int poc_v18;
|
|
+ unsigned int pm_caps;
|
|
+ enum cd_types cd_type;
|
|
+
|
|
+ unsigned int pio_mode;
|
|
+ unsigned int enable_autocmd12;
|
|
+
|
|
+ struct card_gpio *gpio;
|
|
+ int enable_cpm_rx_tuning;
|
|
+ int enable_cpm_tx_tuning;
|
|
+ bool ext_cd_gpio_invert;
|
|
+
|
|
+ void (*cfg_gpio)(struct platform_device *dev, int width);
|
|
+ int (*private_init)(void);
|
|
+};
|
|
+
|
|
+
|
|
+#define INGENIC_MMC_CARD_PRESENT 0
|
|
+#define INGENIC_MMC_CARD_NEED_INIT 1
|
|
+#define INGENIC_MMC_USE_PIO 2
|
|
+/**
|
|
+ * struct sdhci_ingenic - INGENIC SDHCI instance
|
|
+ * @host: The SDHCI host created
|
|
+ * @pdev: The platform device we where created from.
|
|
+ * @ioarea: The resource created when we claimed the IO area.
|
|
+ * @pdata: The platform data for this controller.
|
|
+ */
|
|
+struct sdhci_ingenic {
|
|
+ struct device *dev;
|
|
+ struct sdhci_host *host;
|
|
+ struct platform_device *pdev;
|
|
+ struct device_node *node;
|
|
+ struct sdhci_ingenic_pdata *pdata;
|
|
+ struct list_head list;
|
|
+ struct clk *clk_cgu;
|
|
+ struct clk *clk_gate;
|
|
+ struct clk *clk_ext;
|
|
+ struct clk *clk_mux;
|
|
+ struct clk *clk_mpll;
|
|
+ int cur_clk;
|
|
+ int ext_cd_irq;
|
|
+ int ext_cd_gpio;
|
|
+ unsigned long clk_rates;
|
|
+ unsigned long flags;
|
|
+};
|
|
+
|
|
+int ingenic_sdio_wlan_init(struct device *dev, int index);
|
|
+int ingenic_mmc_clk_ctrl(int index, int on);
|
|
+#endif /* __SDHCI_INGENIC_H__ */
|