Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit c861cd3e authored by Linus Torvalds's avatar Linus Torvalds
Browse files

Merge branch 'next/devel2' of git://git.linaro.org/people/arnd/arm-soc

* 'next/devel2' of git://git.linaro.org/people/arnd/arm-soc: (30 commits)
  ARM: mmp: register internal sram bank
  ARM: mmp: register audio sram bank
  ARM: mmp: add sram allocator
  gpio/samsung: Complain loudly if we don't know the SoC
  ARM: S3C64XX: Fix SoC identification for S3C64xx devices
  ARM: S3C2443: Remove redundant s3c_register_clocks call for init_clocks
  ARM: S3C24XX: Add devname for hsmmc1 pclk
  ARM: S3C24XX: use clk_get_rate to init fclk in common_setup_clocks
  ARM: S3C2443: Accommodate cpufreq frequency scheme in armdiv
  ARM: S3C2443: handle unset armdiv values gracefully
  ARM: S3C2443: Add get_rate operation for clk_armdiv
  ARM: S3C2416: Add comment describing the armdiv/armclk
  ARM: S3C2443: Move clk_arm and clk_armdiv to common code
  ARM: S3C24XX: Add infrastructure to transmit armdiv to common code
  ARM: S3C2416: Add armdiv_mask constant
  ARM: EXYNOS4: Add support for M-5MOLS camera on Nuri board
  ARM: EXYNOS4: Enable MFC on ORIGEN
  ARM: SAMSUNG: Add support s3c2416-adc for S3C2416/S3C2450
  ARM: SAMSUNG: Add support s3c2443-adc for S3C2443
  ARM: SAMSUNG: Allow overriding of adc device name for S3C24XX
  ...
parents 7abec10c b8bc8397
Loading
Loading
Loading
Loading
+2 −0
Original line number Diff line number Diff line
@@ -595,6 +595,7 @@ config ARCH_MMP
	select TICK_ONESHOT
	select PLAT_PXA
	select SPARSE_IRQ
	select GENERIC_ALLOCATOR
	help
	  Support for Marvell's PXA168/PXA910(MMP) and MMP2 processor line.

@@ -769,6 +770,7 @@ config ARCH_S3C64XX
	select CPU_V6
	select ARM_VIC
	select HAVE_CLK
	select HAVE_TCM
	select CLKDEV_LOOKUP
	select NO_IOPORT
	select ARCH_USES_GETTIMEOFFSET
+11 −1
Original line number Diff line number Diff line
@@ -217,6 +217,7 @@ config MACH_UNIVERSAL_C210
config MACH_NURI
	bool "Mobile NURI Board"
	select CPU_EXYNOS4210
	select S5P_GPIO_INT
	select S3C_DEV_WDT
	select S3C_DEV_RTC
	select S5P_DEV_FIMD0
@@ -226,15 +227,23 @@ config MACH_NURI
	select S3C_DEV_I2C1
	select S3C_DEV_I2C3
	select S3C_DEV_I2C5
	select S5P_DEV_CSIS0
	select S5P_DEV_FIMC0
	select S5P_DEV_FIMC1
	select S5P_DEV_FIMC2
	select S5P_DEV_FIMC3
	select S5P_DEV_MFC
	select S5P_DEV_USB_EHCI
	select S5P_SETUP_MIPIPHY
	select EXYNOS4_DEV_PD
	select EXYNOS4_SETUP_FIMC
	select EXYNOS4_SETUP_FIMD0
	select EXYNOS4_SETUP_I2C1
	select EXYNOS4_SETUP_I2C3
	select EXYNOS4_SETUP_I2C5
	select EXYNOS4_SETUP_SDHCI
	select EXYNOS4_SETUP_USB_PHY
	select S5P_SETUP_MIPIPHY
	select SAMSUNG_DEV_PWM
	select SAMSUNG_DEV_ADC
	help
@@ -253,11 +262,12 @@ config MACH_ORIGEN
	select S5P_DEV_FIMC3
	select S5P_DEV_FIMD0
	select S5P_DEV_I2C_HDMIPHY
	select S5P_DEV_MFC
	select S5P_DEV_TV
	select S5P_DEV_USB_EHCI
	select EXYNOS4_DEV_PD
	select SAMSUNG_DEV_BACKLIGHT
	select SAMSUNG_DEV_PWM
	select EXYNOS4_DEV_PD
	select EXYNOS4_SETUP_FIMD0
	select EXYNOS4_SETUP_SDHCI
	select EXYNOS4_SETUP_USB_PHY
+151 −7
Original line number Diff line number Diff line
@@ -27,6 +27,9 @@
#include <linux/pwm_backlight.h>

#include <video/platform_lcd.h>
#include <media/m5mols.h>
#include <media/s5p_fimc.h>
#include <media/v4l2-mediabus.h>

#include <asm/mach/arch.h>
#include <asm/mach-types.h>
@@ -45,6 +48,9 @@
#include <plat/iic.h>
#include <plat/mfc.h>
#include <plat/pd.h>
#include <plat/fimc-core.h>
#include <plat/camport.h>
#include <plat/mipi_csis.h>

#include <mach/map.h>

@@ -65,6 +71,8 @@
enum fixed_regulator_id {
	FIXED_REG_ID_MMC = 0,
	FIXED_REG_ID_MAX8903,
	FIXED_REG_ID_CAM_A28V,
	FIXED_REG_ID_CAM_12V,
};

static struct s3c2410_uartcfg nuri_uartcfgs[] __initdata = {
@@ -1066,13 +1074,6 @@ static struct platform_device nuri_max8903_device = {
	},
};

static struct device *nuri_cm_devices[] = {
	&s3c_device_i2c5.dev,
	&s3c_device_adc.dev,
	NULL, /* Reserved for UART */
	NULL,
};

static void __init nuri_power_init(void)
{
	int gpio;
@@ -1117,10 +1118,140 @@ static void __init nuri_ehci_init(void)
	s5p_ehci_set_platdata(pdata);
}

/* CAMERA */
static struct regulator_consumer_supply cam_vdda_supply[] = {
	REGULATOR_SUPPLY("a_sensor", "0-001f"),
};

static struct regulator_init_data cam_vdda_reg_init_data = {
	.constraints = { .valid_ops_mask = REGULATOR_CHANGE_STATUS },
	.num_consumer_supplies = ARRAY_SIZE(cam_vdda_supply),
	.consumer_supplies = cam_vdda_supply,
};

static struct fixed_voltage_config cam_vdda_fixed_voltage_cfg = {
	.supply_name	= "CAM_IO_EN",
	.microvolts	= 2800000,
	.gpio		= EXYNOS4_GPE2(1), /* CAM_IO_EN */
	.enable_high	= 1,
	.init_data	= &cam_vdda_reg_init_data,
};

static struct platform_device cam_vdda_fixed_rdev = {
	.name = "reg-fixed-voltage", .id = FIXED_REG_ID_CAM_A28V,
	.dev = { .platform_data	= &cam_vdda_fixed_voltage_cfg },
};

static struct regulator_consumer_supply camera_8m_12v_supply =
	REGULATOR_SUPPLY("dig_12", "0-001f");

static struct regulator_init_data cam_8m_12v_reg_init_data = {
	.num_consumer_supplies	= 1,
	.consumer_supplies	= &camera_8m_12v_supply,
	.constraints = {
		.valid_ops_mask = REGULATOR_CHANGE_STATUS
	},
};

static struct fixed_voltage_config cam_8m_12v_fixed_voltage_cfg = {
	.supply_name	= "8M_1.2V",
	.microvolts	= 1200000,
	.gpio		= EXYNOS4_GPE2(5), /* 8M_1.2V_EN */
	.enable_high	= 1,
	.init_data	= &cam_8m_12v_reg_init_data,
};

static struct platform_device cam_8m_12v_fixed_rdev = {
	.name = "reg-fixed-voltage", .id = FIXED_REG_ID_CAM_12V,
	.dev = { .platform_data = &cam_8m_12v_fixed_voltage_cfg },
};

static struct s5p_platform_mipi_csis mipi_csis_platdata = {
	.clk_rate	= 166000000UL,
	.lanes		= 2,
	.alignment	= 32,
	.hs_settle	= 12,
	.phy_enable	= s5p_csis_phy_enable,
};

#define GPIO_CAM_MEGA_RST	EXYNOS4_GPY3(7) /* ISP_RESET */
#define GPIO_CAM_8M_ISP_INT	EXYNOS4_GPL2(5)

static struct m5mols_platform_data m5mols_platdata = {
	.gpio_reset = GPIO_CAM_MEGA_RST,
};

static struct i2c_board_info m5mols_board_info = {
	I2C_BOARD_INFO("M5MOLS", 0x1F),
	.platform_data	= &m5mols_platdata,
};

static struct s5p_fimc_isp_info nuri_camera_sensors[] = {
	{
		.flags		= V4L2_MBUS_PCLK_SAMPLE_FALLING |
				  V4L2_MBUS_VSYNC_ACTIVE_LOW,
		.bus_type	= FIMC_MIPI_CSI2,
		.board_info	= &m5mols_board_info,
		.clk_frequency	= 24000000UL,
		.csi_data_align	= 32,
	},
};

static struct s5p_platform_fimc fimc_md_platdata = {
	.isp_info	= nuri_camera_sensors,
	.num_clients	= ARRAY_SIZE(nuri_camera_sensors),
};

static struct gpio nuri_camera_gpios[] = {
	{ GPIO_CAM_8M_ISP_INT,	GPIOF_IN,           "8M_ISP_INT"  },
	{ GPIO_CAM_MEGA_RST,	GPIOF_OUT_INIT_LOW, "CAM_8M_NRST" },
};

static void nuri_camera_init(void)
{
	s3c_set_platdata(&mipi_csis_platdata, sizeof(mipi_csis_platdata),
			 &s5p_device_mipi_csis0);
	s3c_set_platdata(&fimc_md_platdata,  sizeof(fimc_md_platdata),
			 &s5p_device_fimc_md);

	if (gpio_request_array(nuri_camera_gpios,
			       ARRAY_SIZE(nuri_camera_gpios))) {
		pr_err("%s: GPIO request failed\n", __func__);
		return;
	}

	m5mols_board_info.irq = s5p_register_gpio_interrupt(GPIO_CAM_8M_ISP_INT);
	if (!IS_ERR_VALUE(m5mols_board_info.irq))
		s3c_gpio_cfgpin(GPIO_CAM_8M_ISP_INT, S3C_GPIO_SFN(0xF));
	else
		pr_err("%s: Failed to configure 8M_ISP_INT GPIO\n", __func__);

	/* Free GPIOs controlled directly by the sensor drivers. */
	gpio_free(GPIO_CAM_MEGA_RST);

	if (exynos4_fimc_setup_gpio(S5P_CAMPORT_A)) {
		pr_err("%s: Camera port A setup failed\n", __func__);
		return;
	}
	/* Increase drive strength of the sensor clock output */
	s5p_gpio_set_drvstr(EXYNOS4_GPJ1(3), S5P_GPIO_DRVSTR_LV4);
}

static struct s3c2410_platform_i2c nuri_i2c0_platdata __initdata = {
	.frequency	= 400000U,
	.sda_delay	= 200,
};

static struct platform_device *nuri_devices[] __initdata = {
	/* Samsung Platform Devices */
	&s3c_device_i2c5, /* PMIC should initialize first */
	&s3c_device_i2c0,
	&emmc_fixed_voltage,
	&s5p_device_mipi_csis0,
	&s5p_device_fimc0,
	&s5p_device_fimc1,
	&s5p_device_fimc2,
	&s5p_device_fimc3,
	&s5p_device_fimd0,
	&s3c_device_hsmmc0,
	&s3c_device_hsmmc2,
@@ -1137,6 +1268,8 @@ static struct platform_device *nuri_devices[] __initdata = {
	&s5p_device_mfc_r,
	&exynos4_device_pd[PD_MFC],
	&exynos4_device_pd[PD_LCD0],
	&exynos4_device_pd[PD_CAM],
	&s5p_device_fimc_md,

	/* NURI Devices */
	&nuri_gpio_keys,
@@ -1144,6 +1277,8 @@ static struct platform_device *nuri_devices[] __initdata = {
	&nuri_backlight_device,
	&max8903_fixed_reg_dev,
	&nuri_max8903_device,
	&cam_vdda_fixed_rdev,
	&cam_8m_12v_fixed_rdev,
};

static void __init nuri_map_io(void)
@@ -1164,6 +1299,7 @@ static void __init nuri_machine_init(void)
	nuri_tsp_init();
	nuri_power_init();

	s3c_i2c0_set_platdata(&nuri_i2c0_platdata);
	i2c_register_board_info(1, i2c1_devs, ARRAY_SIZE(i2c1_devs));
	s3c_i2c3_set_platdata(&i2c3_data);
	i2c_register_board_info(3, i2c3_devs, ARRAY_SIZE(i2c3_devs));
@@ -1175,6 +1311,8 @@ static void __init nuri_machine_init(void)

	s5p_fimd0_set_platdata(&nuri_fb_pdata);

	nuri_camera_init();

	nuri_ehci_init();
	clk_xusbxti.rate = 24000000;

@@ -1182,6 +1320,12 @@ static void __init nuri_machine_init(void)
	platform_add_devices(nuri_devices, ARRAY_SIZE(nuri_devices));
	s5p_device_mfc.dev.parent = &exynos4_device_pd[PD_MFC].dev;
	s5p_device_fimd0.dev.parent = &exynos4_device_pd[PD_LCD0].dev;

	s5p_device_fimc0.dev.parent = &exynos4_device_pd[PD_CAM].dev;
	s5p_device_fimc1.dev.parent = &exynos4_device_pd[PD_CAM].dev;
	s5p_device_fimc2.dev.parent = &exynos4_device_pd[PD_CAM].dev;
	s5p_device_fimc3.dev.parent = &exynos4_device_pd[PD_CAM].dev;
	s5p_device_mipi_csis0.dev.parent = &exynos4_device_pd[PD_CAM].dev;
}

MACHINE_START(NURI, "NURI")
+21 −0
Original line number Diff line number Diff line
@@ -39,6 +39,7 @@
#include <plat/backlight.h>
#include <plat/pd.h>
#include <plat/fb.h>
#include <plat/mfc.h>

#include <mach/map.h>

@@ -89,6 +90,8 @@ static struct s3c2410_uartcfg origen_uartcfgs[] __initdata = {

static struct regulator_consumer_supply __initdata ldo3_consumer[] = {
	REGULATOR_SUPPLY("vdd11", "s5p-mipi-csis.0"), /* MIPI */
	REGULATOR_SUPPLY("vdd", "exynos4-hdmi"), /* HDMI */
	REGULATOR_SUPPLY("vdd_pll", "exynos4-hdmi"), /* HDMI */
};
static struct regulator_consumer_supply __initdata ldo6_consumer[] = {
	REGULATOR_SUPPLY("vdd18", "s5p-mipi-csis.0"), /* MIPI */
@@ -98,6 +101,7 @@ static struct regulator_consumer_supply __initdata ldo7_consumer[] = {
};
static struct regulator_consumer_supply __initdata ldo8_consumer[] = {
	REGULATOR_SUPPLY("vdd", "s5p-adc"), /* ADC */
	REGULATOR_SUPPLY("vdd_osc", "exynos4-hdmi"), /* HDMI */
};
static struct regulator_consumer_supply __initdata ldo9_consumer[] = {
	REGULATOR_SUPPLY("dvdd", "swb-a31"), /* AR6003 WLAN & CSR 8810 BT */
@@ -598,9 +602,17 @@ static struct platform_device *origen_devices[] __initdata = {
	&s5p_device_fimd0,
	&s5p_device_hdmi,
	&s5p_device_i2c_hdmiphy,
	&s5p_device_mfc,
	&s5p_device_mfc_l,
	&s5p_device_mfc_r,
	&s5p_device_mixer,
	&exynos4_device_pd[PD_LCD0],
	&exynos4_device_pd[PD_TV],
	&exynos4_device_pd[PD_G3D],
	&exynos4_device_pd[PD_LCD1],
	&exynos4_device_pd[PD_CAM],
	&exynos4_device_pd[PD_GPS],
	&exynos4_device_pd[PD_MFC],
	&origen_device_gpiokeys,
	&origen_lcd_hv070wsa,
};
@@ -638,6 +650,11 @@ static void __init origen_power_init(void)
	s3c_gpio_setpull(EXYNOS4_GPX0(4), S3C_GPIO_PULL_NONE);
}

static void __init origen_reserve(void)
{
	s5p_mfc_reserve_mem(0x43000000, 8 << 20, 0x51000000, 8 << 20);
}

static void __init origen_machine_init(void)
{
	origen_power_init();
@@ -661,11 +678,14 @@ static void __init origen_machine_init(void)
	s5p_fimd0_set_platdata(&origen_lcd_pdata);

	platform_add_devices(origen_devices, ARRAY_SIZE(origen_devices));

	s5p_device_fimd0.dev.parent = &exynos4_device_pd[PD_LCD0].dev;

	s5p_device_hdmi.dev.parent = &exynos4_device_pd[PD_TV].dev;
	s5p_device_mixer.dev.parent = &exynos4_device_pd[PD_TV].dev;

	s5p_device_mfc.dev.parent = &exynos4_device_pd[PD_MFC].dev;

	samsung_bl_set(&origen_bl_gpio_info, &origen_bl_data);
}

@@ -676,4 +696,5 @@ MACHINE_START(ORIGEN, "ORIGEN")
	.map_io		= origen_map_io,
	.init_machine	= origen_machine_init,
	.timer		= &exynos4_timer,
	.reserve	= &origen_reserve,
MACHINE_END
+1 −1
Original line number Diff line number Diff line
@@ -7,7 +7,7 @@ obj-y += common.o clock.o devices.o time.o
# SoC support
obj-$(CONFIG_CPU_PXA168)	+= pxa168.o irq-pxa168.o
obj-$(CONFIG_CPU_PXA910)	+= pxa910.o irq-pxa168.o
obj-$(CONFIG_CPU_MMP2)		+= mmp2.o irq-mmp2.o
obj-$(CONFIG_CPU_MMP2)		+= mmp2.o irq-mmp2.o sram.o

# board support
obj-$(CONFIG_MACH_ASPENITE)	+= aspenite.o
Loading