mirror of https://gitee.com/openkylin/linux.git
pcm038: Add SPI/MC13783 support
Signed-off-by: Sascha Hauer <s.hauer@pengutronix.de>
This commit is contained in:
parent
de41fddd9e
commit
6153384161
|
@ -23,6 +23,10 @@
|
||||||
#include <linux/mtd/plat-ram.h>
|
#include <linux/mtd/plat-ram.h>
|
||||||
#include <linux/mtd/physmap.h>
|
#include <linux/mtd/physmap.h>
|
||||||
#include <linux/platform_device.h>
|
#include <linux/platform_device.h>
|
||||||
|
#include <linux/regulator/machine.h>
|
||||||
|
#include <linux/mfd/mc13783.h>
|
||||||
|
#include <linux/spi/spi.h>
|
||||||
|
#include <linux/irq.h>
|
||||||
|
|
||||||
#include <asm/mach-types.h>
|
#include <asm/mach-types.h>
|
||||||
#include <asm/mach/arch.h>
|
#include <asm/mach/arch.h>
|
||||||
|
@ -35,6 +39,7 @@
|
||||||
#include <mach/iomux.h>
|
#include <mach/iomux.h>
|
||||||
#include <mach/imx-uart.h>
|
#include <mach/imx-uart.h>
|
||||||
#include <mach/mxc_nand.h>
|
#include <mach/mxc_nand.h>
|
||||||
|
#include <mach/spi.h>
|
||||||
|
|
||||||
#include "devices.h"
|
#include "devices.h"
|
||||||
|
|
||||||
|
@ -78,8 +83,6 @@ static int pcm038_pins[] = {
|
||||||
PC6_PF_I2C2_SCL,
|
PC6_PF_I2C2_SCL,
|
||||||
/* SPI1 */
|
/* SPI1 */
|
||||||
PD25_PF_CSPI1_RDY,
|
PD25_PF_CSPI1_RDY,
|
||||||
PD27_PF_CSPI1_SS1,
|
|
||||||
PD28_PF_CSPI1_SS0,
|
|
||||||
PD29_PF_CSPI1_SCLK,
|
PD29_PF_CSPI1_SCLK,
|
||||||
PD30_PF_CSPI1_MISO,
|
PD30_PF_CSPI1_MISO,
|
||||||
PD31_PF_CSPI1_MOSI,
|
PD31_PF_CSPI1_MOSI,
|
||||||
|
@ -196,6 +199,86 @@ static struct i2c_board_info pcm038_i2c_devices[] = {
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
|
static int pcm038_spi_cs[] = {GPIO_PORTD + 28};
|
||||||
|
|
||||||
|
static struct spi_imx_master pcm038_spi_0_data = {
|
||||||
|
.chipselect = pcm038_spi_cs,
|
||||||
|
.num_chipselect = ARRAY_SIZE(pcm038_spi_cs),
|
||||||
|
};
|
||||||
|
|
||||||
|
static struct regulator_consumer_supply sdhc1_consumers[] = {
|
||||||
|
{
|
||||||
|
.dev = &mxc_sdhc_device1.dev,
|
||||||
|
.supply = "sdhc_vcc",
|
||||||
|
},
|
||||||
|
};
|
||||||
|
|
||||||
|
static struct regulator_init_data sdhc1_data = {
|
||||||
|
.constraints = {
|
||||||
|
.min_uV = 3000000,
|
||||||
|
.max_uV = 3400000,
|
||||||
|
.valid_ops_mask = REGULATOR_CHANGE_VOLTAGE |
|
||||||
|
REGULATOR_CHANGE_MODE | REGULATOR_CHANGE_STATUS,
|
||||||
|
.valid_modes_mask = REGULATOR_MODE_NORMAL |
|
||||||
|
REGULATOR_MODE_FAST,
|
||||||
|
.always_on = 0,
|
||||||
|
.boot_on = 0,
|
||||||
|
},
|
||||||
|
.num_consumer_supplies = ARRAY_SIZE(sdhc1_consumers),
|
||||||
|
.consumer_supplies = sdhc1_consumers,
|
||||||
|
};
|
||||||
|
|
||||||
|
static struct regulator_consumer_supply cam_consumers[] = {
|
||||||
|
{
|
||||||
|
.dev = NULL,
|
||||||
|
.supply = "imx_cam_vcc",
|
||||||
|
},
|
||||||
|
};
|
||||||
|
|
||||||
|
static struct regulator_init_data cam_data = {
|
||||||
|
.constraints = {
|
||||||
|
.min_uV = 3000000,
|
||||||
|
.max_uV = 3400000,
|
||||||
|
.valid_ops_mask = REGULATOR_CHANGE_VOLTAGE |
|
||||||
|
REGULATOR_CHANGE_MODE | REGULATOR_CHANGE_STATUS,
|
||||||
|
.valid_modes_mask = REGULATOR_MODE_NORMAL |
|
||||||
|
REGULATOR_MODE_FAST,
|
||||||
|
.always_on = 0,
|
||||||
|
.boot_on = 0,
|
||||||
|
},
|
||||||
|
.num_consumer_supplies = ARRAY_SIZE(cam_consumers),
|
||||||
|
.consumer_supplies = cam_consumers,
|
||||||
|
};
|
||||||
|
|
||||||
|
struct mc13783_regulator_init_data pcm038_regulators[] = {
|
||||||
|
{
|
||||||
|
.id = MC13783_REGU_VCAM,
|
||||||
|
.init_data = &cam_data,
|
||||||
|
}, {
|
||||||
|
.id = MC13783_REGU_VMMC1,
|
||||||
|
.init_data = &sdhc1_data,
|
||||||
|
},
|
||||||
|
};
|
||||||
|
|
||||||
|
static struct mc13783_platform_data pcm038_pmic = {
|
||||||
|
.regulators = pcm038_regulators,
|
||||||
|
.num_regulators = ARRAY_SIZE(pcm038_regulators),
|
||||||
|
.flags = MC13783_USE_ADC | MC13783_USE_REGULATOR |
|
||||||
|
MC13783_USE_TOUCHSCREEN,
|
||||||
|
};
|
||||||
|
|
||||||
|
static struct spi_board_info pcm038_spi_board_info[] __initdata = {
|
||||||
|
{
|
||||||
|
.modalias = "mc13783",
|
||||||
|
.irq = IRQ_GPIOB(23),
|
||||||
|
.max_speed_hz = 300000,
|
||||||
|
.bus_num = 0,
|
||||||
|
.chip_select = 0,
|
||||||
|
.platform_data = &pcm038_pmic,
|
||||||
|
.mode = SPI_CS_HIGH,
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
static void __init pcm038_init(void)
|
static void __init pcm038_init(void)
|
||||||
{
|
{
|
||||||
mxc_gpio_setup_multiple_pins(pcm038_pins, ARRAY_SIZE(pcm038_pins),
|
mxc_gpio_setup_multiple_pins(pcm038_pins, ARRAY_SIZE(pcm038_pins),
|
||||||
|
@ -219,6 +302,15 @@ static void __init pcm038_init(void)
|
||||||
/* PE18 for user-LED D40 */
|
/* PE18 for user-LED D40 */
|
||||||
mxc_gpio_mode(GPIO_PORTE | 18 | GPIO_GPIO | GPIO_OUT);
|
mxc_gpio_mode(GPIO_PORTE | 18 | GPIO_GPIO | GPIO_OUT);
|
||||||
|
|
||||||
|
mxc_gpio_mode(GPIO_PORTD | 28 | GPIO_GPIO | GPIO_OUT);
|
||||||
|
|
||||||
|
/* MC13783 IRQ */
|
||||||
|
mxc_gpio_mode(GPIO_PORTB | 23 | GPIO_GPIO | GPIO_IN);
|
||||||
|
|
||||||
|
mxc_register_device(&mxc_spi_device0, &pcm038_spi_0_data);
|
||||||
|
spi_register_board_info(pcm038_spi_board_info,
|
||||||
|
ARRAY_SIZE(pcm038_spi_board_info));
|
||||||
|
|
||||||
platform_add_devices(platform_devices, ARRAY_SIZE(platform_devices));
|
platform_add_devices(platform_devices, ARRAY_SIZE(platform_devices));
|
||||||
|
|
||||||
#ifdef CONFIG_MACH_PCM970_BASEBOARD
|
#ifdef CONFIG_MACH_PCM970_BASEBOARD
|
||||||
|
|
Loading…
Reference in New Issue