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

Commit 1ad4fb2f authored by Olof Johansson's avatar Olof Johansson
Browse files

Merge branch 'ams-delta' of...

Merge branch 'ams-delta' of git://git.kernel.org/pub/scm/linux/kernel/git/tmlind/linux-omap into next/boards

* 'ams-delta' of git://git.kernel.org/pub/scm/linux/kernel/git/tmlind/linux-omap:
  ASoC: OMAP: ams-delta: drop .set_bias_level callback
  ARM: OMAP1: ams-delta: update the modem to use regulator API
  ARM: OMAP1: ams-delta: set up regulator over modem reset GPIO pin
  ARM: OMAP1: ams-delta: clean up init data section assignments
  ARM: OMAP1: ams-delta: fix incorrect section tags
parents 2eed4e7d 0379c1f5
Loading
Loading
Loading
Loading
+2 −0
Original line number Diff line number Diff line
@@ -157,6 +157,8 @@ config MACH_AMS_DELTA
	select FIQ
	select GPIO_GENERIC_PLATFORM
	select LEDS_GPIO_REGISTER
	select REGULATOR
	select REGULATOR_FIXED_VOLTAGE
	help
	  Support for the Amstrad E3 (codename Delta) videophone. Say Y here
	  if you have such a device.
+96 −20
Original line number Diff line number Diff line
@@ -19,6 +19,9 @@
#include <linux/interrupt.h>
#include <linux/leds.h>
#include <linux/platform_device.h>
#include <linux/regulator/consumer.h>
#include <linux/regulator/fixed.h>
#include <linux/regulator/machine.h>
#include <linux/serial_8250.h>
#include <linux/export.h>

@@ -150,11 +153,11 @@ static struct map_desc ams_delta_io_desc[] __initdata = {
	}
};

static struct omap_lcd_config ams_delta_lcd_config = {
static struct omap_lcd_config ams_delta_lcd_config __initdata = {
	.ctrl_name	= "internal",
};

static struct omap_usb_config ams_delta_usb_config __initdata = {
static struct omap_usb_config ams_delta_usb_config = {
	.register_host	= 1,
	.hmc_mode	= 16,
	.pins[0]	= 2,
@@ -167,7 +170,7 @@ static struct omap_board_config_kernel ams_delta_config[] __initdata = {
#define LATCH1_GPIO_BASE	232
#define LATCH1_NGPIO		8

static struct resource latch1_resources[] __initconst = {
static struct resource latch1_resources[] = {
	[0] = {
		.name	= "dat",
		.start	= LATCH1_PHYS,
@@ -176,7 +179,7 @@ static struct resource latch1_resources[] __initconst = {
	},
};

static struct bgpio_pdata latch1_pdata __initconst = {
static struct bgpio_pdata latch1_pdata = {
	.base	= LATCH1_GPIO_BASE,
	.ngpio	= LATCH1_NGPIO,
};
@@ -191,7 +194,7 @@ static struct platform_device latch1_gpio_device = {
	},
};

static struct resource latch2_resources[] __initconst = {
static struct resource latch2_resources[] = {
	[0] = {
		.name	= "dat",
		.start	= LATCH2_PHYS,
@@ -200,7 +203,7 @@ static struct resource latch2_resources[] __initconst = {
	},
};

static struct bgpio_pdata latch2_pdata __initconst = {
static struct bgpio_pdata latch2_pdata = {
	.base	= AMS_DELTA_LATCH2_GPIO_BASE,
	.ngpio	= AMS_DELTA_LATCH2_NGPIO,
};
@@ -215,7 +218,7 @@ static struct platform_device latch2_gpio_device = {
	},
};

static struct gpio latch_gpios[] __initconst = {
static const struct gpio latch_gpios[] __initconst = {
	{
		.gpio	= LATCH1_GPIO_BASE + 6,
		.flags	= GPIOF_OUT_INIT_LOW,
@@ -236,11 +239,6 @@ static struct gpio latch_gpios[] __initconst = {
		.flags	= GPIOF_OUT_INIT_LOW,
		.label	= "scard_cmdvcc",
	},
	{
		.gpio	= AMS_DELTA_GPIO_PIN_MODEM_NRESET,
		.flags	= GPIOF_OUT_INIT_LOW,
		.label	= "modem_nreset",
	},
	{
		.gpio	= AMS_DELTA_GPIO_PIN_MODEM_CODEC,
		.flags	= GPIOF_OUT_INIT_LOW,
@@ -258,6 +256,44 @@ static struct gpio latch_gpios[] __initconst = {
	},
};

static struct regulator_consumer_supply modem_nreset_consumers[] = {
	REGULATOR_SUPPLY("RESET#", "serial8250.1"),
	REGULATOR_SUPPLY("POR", "cx20442-codec"),
};

static struct regulator_init_data modem_nreset_data = {
	.constraints		= {
		.valid_ops_mask		= REGULATOR_CHANGE_STATUS,
		.boot_on		= 1,
	},
	.num_consumer_supplies	= ARRAY_SIZE(modem_nreset_consumers),
	.consumer_supplies	= modem_nreset_consumers,
};

static struct fixed_voltage_config modem_nreset_config = {
	.supply_name		= "modem_nreset",
	.microvolts		= 3300000,
	.gpio			= AMS_DELTA_GPIO_PIN_MODEM_NRESET,
	.startup_delay		= 25000,
	.enable_high		= 1,
	.enabled_at_boot	= 1,
	.init_data		= &modem_nreset_data,
};

static struct platform_device modem_nreset_device = {
	.name	= "reg-fixed-voltage",
	.id	= -1,
	.dev	= {
		.platform_data	= &modem_nreset_config,
	},
};

struct modem_private_data {
	struct regulator *regulator;
};

static struct modem_private_data modem_priv;

void ams_delta_latch_write(int base, int ngpio, u16 mask, u16 value)
{
	int bit = 0;
@@ -266,6 +302,7 @@ void ams_delta_latch_write(int base, int ngpio, u16 mask, u16 value)
	for (; bit < ngpio; bit++, bitpos = bitpos << 1) {
		if (!(mask & bitpos))
			continue;
		else
			gpio_set_value(base + bit, (value & bitpos) != 0);
	}
}
@@ -300,7 +337,7 @@ static const struct matrix_keymap_data ams_delta_keymap_data = {
	.keymap_size	= ARRAY_SIZE(ams_delta_keymap),
};

static struct omap_kp_platform_data ams_delta_kp_data __initdata = {
static struct omap_kp_platform_data ams_delta_kp_data = {
	.rows		= 8,
	.cols		= 8,
	.keymap_data	= &ams_delta_keymap_data,
@@ -322,7 +359,7 @@ static struct platform_device ams_delta_lcd_device = {
	.id	= -1,
};

static struct gpio_led gpio_leds[] __initconst = {
static const struct gpio_led gpio_leds[] __initconst = {
	{
		.name		 = "camera",
		.gpio		 = LATCH1_GPIO_BASE + 0,
@@ -358,7 +395,7 @@ static struct gpio_led gpio_leds[] __initconst = {
	},
};

static struct gpio_led_platform_data leds_pdata __initconst = {
static const struct gpio_led_platform_data leds_pdata __initconst = {
	.leds		= gpio_leds,
	.num_leds	= ARRAY_SIZE(gpio_leds),
};
@@ -415,7 +452,7 @@ static struct platform_device *ams_delta_devices[] __initdata = {
	&ams_delta_camera_device,
};

static struct platform_device *late_devices[] __initconst = {
static struct platform_device *late_devices[] __initdata = {
	&ams_delta_nand_device,
	&ams_delta_lcd_device,
};
@@ -459,6 +496,22 @@ static void __init ams_delta_init(void)
	omap_writew(omap_readw(ARM_RSTCT1) | 0x0004, ARM_RSTCT1);
}

static void modem_pm(struct uart_port *port, unsigned int state, unsigned old)
{
	struct modem_private_data *priv = port->private_data;

	if (IS_ERR(priv->regulator))
		return;

	if (state == old)
		return;

	if (state == 0)
		regulator_enable(priv->regulator);
	else if (old == 0)
		regulator_disable(priv->regulator);
}

static struct plat_serial8250_port ams_delta_modem_ports[] = {
	{
		.membase	= IOMEM(MODEM_VIRT),
@@ -469,6 +522,8 @@ static struct plat_serial8250_port ams_delta_modem_ports[] = {
		.iotype		= UPIO_MEM,
		.regshift	= 1,
		.uartclk	= BASE_BAUD * 16,
		.pm		= modem_pm,
		.private_data	= &modem_priv,
	},
	{ },
};
@@ -496,6 +551,12 @@ static int __init late_init(void)

	platform_add_devices(late_devices, ARRAY_SIZE(late_devices));

	err = platform_device_register(&modem_nreset_device);
	if (err) {
		pr_err("Couldn't register the modem regulator device\n");
		return err;
	}

	omap_cfg_reg(M14_1510_GPIO2);
	ams_delta_modem_ports[0].irq =
			gpio_to_irq(AMS_DELTA_GPIO_PIN_MODEM_IRQ);
@@ -507,15 +568,30 @@ static int __init late_init(void)
	}
	gpio_direction_input(AMS_DELTA_GPIO_PIN_MODEM_IRQ);

	ams_delta_latch2_write(
		AMS_DELTA_LATCH2_MODEM_NRESET | AMS_DELTA_LATCH2_MODEM_CODEC,
		AMS_DELTA_LATCH2_MODEM_NRESET | AMS_DELTA_LATCH2_MODEM_CODEC);
	/* Initialize the modem_nreset regulator consumer before use */
	modem_priv.regulator = ERR_PTR(-ENODEV);

	ams_delta_latch2_write(AMS_DELTA_LATCH2_MODEM_CODEC,
			AMS_DELTA_LATCH2_MODEM_CODEC);

	err = platform_device_register(&ams_delta_modem_device);
	if (err)
		goto gpio_free;

	/*
	 * Once the modem device is registered, the modem_nreset
	 * regulator can be requested on behalf of that device.
	 */
	modem_priv.regulator = regulator_get(&ams_delta_modem_device.dev,
			"RESET#");
	if (IS_ERR(modem_priv.regulator)) {
		err = PTR_ERR(modem_priv.regulator);
		goto unregister;
	}
	return 0;

unregister:
	platform_device_unregister(&ams_delta_modem_device);
gpio_free:
	gpio_free(AMS_DELTA_GPIO_PIN_MODEM_IRQ);
	return err;
+0 −1
Original line number Diff line number Diff line
@@ -30,7 +30,6 @@

#define AMD_DELTA_LATCH2_SCARD_RSTIN	0x0400
#define AMD_DELTA_LATCH2_SCARD_CMDVCC	0x0800
#define AMS_DELTA_LATCH2_MODEM_NRESET	0x1000
#define AMS_DELTA_LATCH2_MODEM_CODEC	0x2000

#define AMS_DELTA_GPIO_PIN_KEYBRD_DATA	0
+1 −1
Original line number Diff line number Diff line
@@ -103,7 +103,7 @@ static void ams_delta_serio_close(struct serio *serio)
	gpio_set_value(AMS_DELTA_GPIO_PIN_KEYBRD_PWR, 0);
}

static struct gpio ams_delta_gpios[] __initconst_or_module = {
static const struct gpio ams_delta_gpios[] __initconst_or_module = {
	{
		.gpio	= AMS_DELTA_GPIO_PIN_KEYBRD_DATA,
		.flags	= GPIOF_DIR_IN,
+1 −1
Original line number Diff line number Diff line
@@ -145,7 +145,7 @@ static int ams_delta_nand_ready(struct mtd_info *mtd)
	return gpio_get_value(AMS_DELTA_GPIO_PIN_NAND_RB);
}

static struct gpio _mandatory_gpio[] __initconst_or_module = {
static const struct gpio _mandatory_gpio[] = {
	{
		.gpio	= AMS_DELTA_GPIO_PIN_NAND_NCE,
		.flags	= GPIOF_OUT_INIT_HIGH,
Loading