* author: lhhrock-chips.com
*****************************************************************************************/
#define SPI_CHIPSELECT_NUM 3
-static int spi_io_init(void)
-{
- //cs0
- rk2818_mux_api_set(GPIOB4_SPI0CS0_MMC0D4_NAME, IOMUXA_GPIO0_B4);
- //cs1
- rk2818_mux_api_set(GPIOB0_SPI0CSN1_MMC1PCA_NAME, IOMUXA_GPIO0_B0);
- //clk
- rk2818_mux_api_set(GPIOB_SPI0_MMC0_NAME, IOMUXA_SPI0);
- //cs2
- rk2818_mux_api_set(GPIOF5_APWM3_DPWM3_NAME,IOMUXB_GPIO1_B5);
-
- return 0;
-}
-static int spi_io_deinit(void)
-{
- rk2818_mux_api_mode_resume(GPIOB4_SPI0CS0_MMC0D4_NAME);
- rk2818_mux_api_mode_resume(GPIOB0_SPI0CSN1_MMC1PCA_NAME);
- rk2818_mux_api_mode_resume(GPIOB_SPI0_MMC0_NAME);
- rk2818_mux_api_mode_resume(GPIOF5_APWM3_DPWM3_NAME);
- return 0;
-}
-
struct spi_cs_gpio rk2818_spi_cs_gpios[SPI_CHIPSELECT_NUM] = {
{
.name = "spi cs0",
.cs_gpio = RK2818_PIN_PB4,
+ .cs_iomux_name = GPIOB4_SPI0CS0_MMC0D4_NAME,//if no iomux,set it NULL
+ .cs_iomux_mode = IOMUXA_GPIO0_B4,
},
{
.name = "spi cs1",
.cs_gpio = RK2818_PIN_PB0,
+ .cs_iomux_name = GPIOB0_SPI0CSN1_MMC1PCA_NAME,
+ .cs_iomux_mode = IOMUXA_GPIO0_B0,
},
{
.name = "spi cs2",
.cs_gpio = RK2818_PIN_PF5,
+ .cs_iomux_name = GPIOF5_APWM3_DPWM3_NAME,
+ .cs_iomux_mode = IOMUXB_GPIO1_B5,
}
};
+static int spi_io_init(struct spi_cs_gpio *cs_gpios, int cs_num)
+{
+ int i,j,ret;
+ //clk
+ rk2818_mux_api_set(GPIOB_SPI0_MMC0_NAME, IOMUXA_SPI0);
+ //cs
+ if (cs_gpios) {
+ for (i=0; i<cs_num; i++) {
+ rk2818_mux_api_set(cs_gpios[i].cs_iomux_name, cs_gpios[i].cs_iomux_mode);
+ ret = gpio_request(cs_gpios[i].cs_gpio, cs_gpios[i].name);
+ if (ret) {
+ for (j=0;j<i;j++) {
+ gpio_free(cs_gpios[j].cs_gpio);
+ rk2818_mux_api_mode_resume(cs_gpios[j].cs_iomux_name);
+ }
+ printk("[fun:%s, line:%d], gpio request err\n", __func__, __LINE__);
+ return -1;
+ }
+ }
+ }
+ return 0;
+}
+
+static int spi_io_deinit(struct spi_cs_gpio *cs_gpios, int cs_num)
+{
+ int i;
+ rk2818_mux_api_mode_resume(GPIOB_SPI0_MMC0_NAME);
+
+ if (cs_gpios) {
+ for (i=0; i<cs_num; i++) {
+ gpio_free(cs_gpios[i].cs_gpio);
+ rk2818_mux_api_mode_resume(cs_gpios[i].cs_iomux_name);
+ }
+ }
+
+ return 0;
+}
+
struct rk2818_spi_platform_data rk2818_spi_platdata = {
.num_chipselect = SPI_CHIPSELECT_NUM,//raho ´ó°åÐèÒªÖ§³Ö3¸öƬѡ dxj
.chipselect_gpios = rk2818_spi_cs_gpios,