Commit 9e27a0aa authored by Olof Johansson's avatar Olof Johansson
Browse files

Merge tag 'pxa-for-4.10' of https://github.com/rjarzmik/linux into next/soc

This is the pxa changes for v4.10 cycle.

This cycle is covering :
 - some clock fixes common with sa1100 architecture
 - the consequence of the pxa_camera conversion to v4l2
 - a small irq related fix for pxa25x device-tree only

* tag 'pxa-for-4.10' of https://github.com/rjarzmik/linux

:
  ARM: pxa: fix pxa25x interrupt init
  ARM: pxa: remove duplicated include from spitz.c
  ARM: pxa: em-x270: use the new pxa_camera platform_data
  ARM: pxa: ezx: use the new pxa_camera platform_data
  ARM: pxa: mioa701: use the new pxa_camera platform_data
  ARM: pxa: pxa_cplds: honor probe deferral
  ARM: sa11x0/pxa: get rid of get_clock_tick_rate
  watchdog: sa11x0/pxa: get rid of get_clock_tick_rate
  ARM: sa11x0/pxa: acquire timer rate from the clock rate
  clk: pxa25x: OSTIMER0 clocks from the main oscillator

Signed-off-by: default avatarOlof Johansson <olof@lixom.net>
parents 56d027b4 e413bd33
Loading
Loading
Loading
Loading
+0 −1
Original line number Diff line number Diff line
@@ -35,7 +35,6 @@
#include <linux/mtd/sharpsl.h>
#include <linux/input/matrix_keypad.h>
#include <linux/gpio_keys.h>
#include <linux/module.h>
#include <linux/memblock.h>
#include <video/w100fb.h>

+29 −60
Original line number Diff line number Diff line
@@ -23,6 +23,7 @@
#include <linux/gpio.h>
#include <linux/mfd/da903x.h>
#include <linux/regulator/machine.h>
#include <linux/regulator/fixed.h>
#include <linux/spi/spi.h>
#include <linux/spi/tdo24m.h>
#include <linux/spi/libertas_spi.h>
@@ -34,8 +35,6 @@
#include <linux/i2c/pxa-i2c.h>
#include <linux/regulator/userspace-consumer.h>

#include <media/soc_camera.h>

#include <asm/mach-types.h>
#include <asm/mach/arch.h>

@@ -958,8 +957,6 @@ static inline void em_x270_init_gpio_keys(void) {}

/* Quick Capture Interface and sensor setup */
#if defined(CONFIG_VIDEO_PXA27x) || defined(CONFIG_VIDEO_PXA27x_MODULE)
static struct regulator *em_x270_camera_ldo;

static int em_x270_sensor_init(void)
{
	int ret;
@@ -969,81 +966,53 @@ static int em_x270_sensor_init(void)
		return ret;

	gpio_direction_output(cam_reset, 0);

	em_x270_camera_ldo = regulator_get(NULL, "vcc cam");
	if (em_x270_camera_ldo == NULL) {
		gpio_free(cam_reset);
		return -ENODEV;
	}

	ret = regulator_enable(em_x270_camera_ldo);
	if (ret) {
		regulator_put(em_x270_camera_ldo);
		gpio_free(cam_reset);
		return ret;
	}

	gpio_set_value(cam_reset, 1);

	return 0;
}

struct pxacamera_platform_data em_x270_camera_platform_data = {
	.flags  = PXA_CAMERA_MASTER | PXA_CAMERA_DATAWIDTH_8 |
		PXA_CAMERA_PCLK_EN | PXA_CAMERA_MCLK_EN,
	.mclk_10khz = 2600,
static struct regulator_consumer_supply camera_dummy_supplies[] = {
	REGULATOR_SUPPLY("vdd", "0-005d"),
};

static int em_x270_sensor_power(struct device *dev, int on)
{
	int ret;
	int is_on = regulator_is_enabled(em_x270_camera_ldo);

	if (on == is_on)
		return 0;

	gpio_set_value(cam_reset, !on);

	if (on)
		ret = regulator_enable(em_x270_camera_ldo);
	else
		ret = regulator_disable(em_x270_camera_ldo);

	if (ret)
		return ret;

	gpio_set_value(cam_reset, on);

	return 0;
}

static struct i2c_board_info em_x270_i2c_cam_info[] = {
	{
		I2C_BOARD_INFO("mt9m111", 0x48),
static struct regulator_init_data camera_dummy_initdata = {
	.consumer_supplies = camera_dummy_supplies,
	.num_consumer_supplies = ARRAY_SIZE(camera_dummy_supplies),
	.constraints = {
		.valid_ops_mask = REGULATOR_CHANGE_STATUS,
	},
};

static struct soc_camera_link iclink = {
	.bus_id		= 0,
	.power		= em_x270_sensor_power,
	.board_info	= &em_x270_i2c_cam_info[0],
	.i2c_adapter_id	= 0,
static struct fixed_voltage_config camera_dummy_config = {
	.supply_name		= "camera_vdd",
	.input_supply		= "vcc cam",
	.microvolts		= 2800000,
	.gpio			= -1,
	.enable_high		= 0,
	.init_data		= &camera_dummy_initdata,
};

static struct platform_device em_x270_camera = {
	.name	= "soc-camera-pdrv",
	.id	= -1,
static struct platform_device camera_supply_dummy_device = {
	.name	= "reg-fixed-voltage",
	.id	= 1,
	.dev	= {
		.platform_data = &iclink,
		.platform_data = &camera_dummy_config,
	},
};

struct pxacamera_platform_data em_x270_camera_platform_data = {
	.flags  = PXA_CAMERA_MASTER | PXA_CAMERA_DATAWIDTH_8 |
		PXA_CAMERA_PCLK_EN | PXA_CAMERA_MCLK_EN,
	.mclk_10khz = 2600,
	.sensor_i2c_adapter_id = 0,
	.sensor_i2c_address = 0x5d,
};

static void  __init em_x270_init_camera(void)
{
	if (em_x270_sensor_init() == 0) {
	if (em_x270_sensor_init() == 0)
		pxa_set_camera_info(&em_x270_camera_platform_data);
		platform_device_register(&em_x270_camera);
	}
	platform_device_register(&camera_supply_dummy_device);
}
#else
static inline void em_x270_init_camera(void) {}
+72 −104
Original line number Diff line number Diff line
@@ -17,14 +17,14 @@
#include <linux/delay.h>
#include <linux/pwm.h>
#include <linux/pwm_backlight.h>
#include <linux/regulator/machine.h>
#include <linux/regulator/fixed.h>
#include <linux/input.h>
#include <linux/gpio.h>
#include <linux/gpio_keys.h>
#include <linux/leds-lp3944.h>
#include <linux/i2c/pxa-i2c.h>

#include <media/soc_camera.h>

#include <asm/setup.h>
#include <asm/mach-types.h>
#include <asm/mach/arch.h>
@@ -723,6 +723,42 @@ static struct platform_device a780_gpio_keys = {
};

/* camera */
static struct regulator_consumer_supply camera_dummy_supplies[] = {
	REGULATOR_SUPPLY("vdd", "0-005d"),
};

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

static struct fixed_voltage_config camera_dummy_config = {
	.supply_name		= "camera_vdd",
	.microvolts		= 2800000,
	.gpio			= GPIO50_nCAM_EN,
	.enable_high		= 0,
	.init_data		= &camera_dummy_initdata,
};

static struct platform_device camera_supply_dummy_device = {
	.name	= "reg-fixed-voltage",
	.id	= 1,
	.dev	= {
		.platform_data = &camera_dummy_config,
	},
};
static int a780_camera_reset(struct device *dev)
{
	gpio_set_value(GPIO19_GEN1_CAM_RST, 0);
	msleep(10);
	gpio_set_value(GPIO19_GEN1_CAM_RST, 1);

	return 0;
}

static int a780_camera_init(void)
{
	int err;
@@ -731,73 +767,36 @@ static int a780_camera_init(void)
	 * GPIO50_nCAM_EN is active low
	 * GPIO19_GEN1_CAM_RST is active on rising edge
	 */
	err = gpio_request(GPIO50_nCAM_EN, "nCAM_EN");
	if (err) {
		pr_err("%s: Failed to request nCAM_EN\n", __func__);
		goto fail;
	}

	err = gpio_request(GPIO19_GEN1_CAM_RST, "CAM_RST");
	if (err) {
		pr_err("%s: Failed to request CAM_RST\n", __func__);
		goto fail_gpio_cam_rst;
	}

	gpio_direction_output(GPIO50_nCAM_EN, 1);
	gpio_direction_output(GPIO19_GEN1_CAM_RST, 0);

	return 0;

fail_gpio_cam_rst:
	gpio_free(GPIO50_nCAM_EN);
fail:
		return err;
	}

static int a780_camera_power(struct device *dev, int on)
{
	gpio_set_value(GPIO50_nCAM_EN, !on);
	return 0;
}

static int a780_camera_reset(struct device *dev)
{
	gpio_set_value(GPIO19_GEN1_CAM_RST, 0);
	msleep(10);
	gpio_set_value(GPIO19_GEN1_CAM_RST, 1);
	gpio_direction_output(GPIO19_GEN1_CAM_RST, 0);
	a780_camera_reset(NULL);

	return 0;
}

struct pxacamera_platform_data a780_pxacamera_platform_data = {
	.flags  = PXA_CAMERA_MASTER | PXA_CAMERA_DATAWIDTH_8 |
		PXA_CAMERA_PCLK_EN | PXA_CAMERA_MCLK_EN,
		PXA_CAMERA_PCLK_EN | PXA_CAMERA_MCLK_EN |
		PXA_CAMERA_PCP,
	.mclk_10khz = 5000,
	.sensor_i2c_adapter_id = 0,
	.sensor_i2c_address = 0x5d,
};

static struct i2c_board_info a780_camera_i2c_board_info = {
static struct i2c_board_info a780_i2c_board_info[] = {
	{
		I2C_BOARD_INFO("mt9m111", 0x5d),
};

static struct soc_camera_link a780_iclink = {
	.bus_id         = 0,
	.flags          = SOCAM_SENSOR_INVERT_PCLK,
	.i2c_adapter_id = 0,
	.board_info     = &a780_camera_i2c_board_info,
	.power          = a780_camera_power,
	.reset          = a780_camera_reset,
};

static struct platform_device a780_camera = {
	.name   = "soc-camera-pdrv",
	.id     = 0,
	.dev    = {
		.platform_data = &a780_iclink,
	},
};

static struct platform_device *a780_devices[] __initdata = {
	&a780_gpio_keys,
	&camera_supply_dummy_device,
};

static void __init a780_init(void)
@@ -811,19 +810,19 @@ static void __init a780_init(void)
	pxa_set_stuart_info(NULL);

	pxa_set_i2c_info(NULL);
	i2c_register_board_info(0, ARRAY_AND_SIZE(a780_i2c_board_info));

	pxa_set_fb_info(NULL, &ezx_fb_info_1);

	pxa_set_keypad_info(&a780_keypad_platform_data);

	if (a780_camera_init() == 0) {
	if (a780_camera_init() == 0)
		pxa_set_camera_info(&a780_pxacamera_platform_data);
		platform_device_register(&a780_camera);
	}

	pwm_add_table(ezx_pwm_lookup, ARRAY_SIZE(ezx_pwm_lookup));
	platform_add_devices(ARRAY_AND_SIZE(ezx_devices));
	platform_add_devices(ARRAY_AND_SIZE(a780_devices));
	regulator_has_full_constraints();
}

MACHINE_START(EZX_A780, "Motorola EZX A780")
@@ -1001,6 +1000,15 @@ static struct platform_device a910_gpio_keys = {
};

/* camera */
static int a910_camera_reset(struct device *dev)
{
	gpio_set_value(GPIO28_GEN2_CAM_RST, 0);
	msleep(10);
	gpio_set_value(GPIO28_GEN2_CAM_RST, 1);

	return 0;
}

static int a910_camera_init(void)
{
	int err;
@@ -1009,68 +1017,25 @@ static int a910_camera_init(void)
	 * GPIO50_nCAM_EN is active low
	 * GPIO28_GEN2_CAM_RST is active on rising edge
	 */
	err = gpio_request(GPIO50_nCAM_EN, "nCAM_EN");
	if (err) {
		pr_err("%s: Failed to request nCAM_EN\n", __func__);
		goto fail;
	}

	err = gpio_request(GPIO28_GEN2_CAM_RST, "CAM_RST");
	if (err) {
		pr_err("%s: Failed to request CAM_RST\n", __func__);
		goto fail_gpio_cam_rst;
	}

	gpio_direction_output(GPIO50_nCAM_EN, 1);
	gpio_direction_output(GPIO28_GEN2_CAM_RST, 0);

	return 0;

fail_gpio_cam_rst:
	gpio_free(GPIO50_nCAM_EN);
fail:
		return err;
	}

static int a910_camera_power(struct device *dev, int on)
{
	gpio_set_value(GPIO50_nCAM_EN, !on);
	return 0;
}

static int a910_camera_reset(struct device *dev)
{
	gpio_set_value(GPIO28_GEN2_CAM_RST, 0);
	msleep(10);
	gpio_set_value(GPIO28_GEN2_CAM_RST, 1);
	gpio_direction_output(GPIO28_GEN2_CAM_RST, 0);
	a910_camera_reset(NULL);

	return 0;
}

struct pxacamera_platform_data a910_pxacamera_platform_data = {
	.flags  = PXA_CAMERA_MASTER | PXA_CAMERA_DATAWIDTH_8 |
		PXA_CAMERA_PCLK_EN | PXA_CAMERA_MCLK_EN,
		PXA_CAMERA_PCLK_EN | PXA_CAMERA_MCLK_EN |
		PXA_CAMERA_PCP,
	.mclk_10khz = 5000,
};

static struct i2c_board_info a910_camera_i2c_board_info = {
	I2C_BOARD_INFO("mt9m111", 0x5d),
};

static struct soc_camera_link a910_iclink = {
	.bus_id         = 0,
	.i2c_adapter_id = 0,
	.board_info     = &a910_camera_i2c_board_info,
	.power          = a910_camera_power,
	.reset          = a910_camera_reset,
};

static struct platform_device a910_camera = {
	.name   = "soc-camera-pdrv",
	.id     = 0,
	.dev    = {
		.platform_data = &a910_iclink,
	},
	.sensor_i2c_adapter_id = 0,
	.sensor_i2c_address = 0x5d,
};

/* leds-lp3944 */
@@ -1122,10 +1087,14 @@ static struct i2c_board_info __initdata a910_i2c_board_info[] = {
		I2C_BOARD_INFO("lp3944", 0x60),
		.platform_data = &a910_lp3944_leds,
	},
	{
		I2C_BOARD_INFO("mt9m111", 0x5d),
	},
};

static struct platform_device *a910_devices[] __initdata = {
	&a910_gpio_keys,
	&camera_supply_dummy_device,
};

static void __init a910_init(void)
@@ -1145,14 +1114,13 @@ static void __init a910_init(void)

	pxa_set_keypad_info(&a910_keypad_platform_data);

	if (a910_camera_init() == 0) {
	if (a910_camera_init() == 0)
		pxa_set_camera_info(&a910_pxacamera_platform_data);
		platform_device_register(&a910_camera);
	}

	pwm_add_table(ezx_pwm_lookup, ARRAY_SIZE(ezx_pwm_lookup));
	platform_add_devices(ARRAY_AND_SIZE(ezx_devices));
	platform_add_devices(ARRAY_AND_SIZE(a910_devices));
	regulator_has_full_constraints();
}

MACHINE_START(EZX_A910, "Motorola EZX A910")
+1 −17
Original line number Diff line number Diff line
@@ -43,21 +43,6 @@ void clear_reset_status(unsigned int mask)
	}
}

unsigned long get_clock_tick_rate(void)
{
	unsigned long clock_tick_rate;

	if (cpu_is_pxa25x())
		clock_tick_rate = 3686400;
	else if (machine_is_mainstone())
		clock_tick_rate = 3249600;
	else
		clock_tick_rate = 3250000;

	return clock_tick_rate;
}
EXPORT_SYMBOL(get_clock_tick_rate);

/*
 * For non device-tree builds, keep legacy timer init
 */
@@ -69,8 +54,7 @@ void __init pxa_timer_init(void)
		pxa27x_clocks_init();
	if (cpu_is_pxa3xx())
		pxa3xx_clocks_init();
	pxa_timer_nodt_init(IRQ_OST0, io_p2v(0x40a00000),
			    get_clock_tick_rate());
	pxa_timer_nodt_init(IRQ_OST0, io_p2v(0x40a00000));
}

/*
+0 −2
Original line number Diff line number Diff line
@@ -303,8 +303,6 @@
 */
extern unsigned int get_memclk_frequency_10khz(void);

/* return the clock tick rate of the OS timer */
extern unsigned long get_clock_tick_rate(void);
#endif

#endif  /* _ASM_ARCH_HARDWARE_H */
Loading