Explorar o código

Merge branch 'omap-fixes-urgent' of git://git.linaro.org/people/rmk/linux-arm

This pull request covers the major oopsing issues with OMAP, caused by
the lack of the TWL driver.  Even when the TWL driver is not built in,
we shouldn't oops.

* 'omap-fixes-urgent' of git://git.linaro.org/people/rmk/linux-arm:
  ARM: omap: fix broken twl-core dependencies and ifdefs
  ARM: omap: fix oops in drivers/video/omap2/dss/dpi.c
  ARM: omap: fix oops in arch/arm/mach-omap2/vp.c when pmic is not found
Linus Torvalds %!s(int64=14) %!d(string=hai) anos
pai
achega
a269c2f5a5
Modificáronse 4 ficheiros con 15 adicións e 3 borrados
  1. 5 0
      arch/arm/mach-omap2/vp.c
  2. 1 1
      drivers/mfd/Kconfig
  3. 4 2
      drivers/mfd/twl-core.c
  4. 5 0
      drivers/video/omap2/dss/dpi.c

+ 5 - 0
arch/arm/mach-omap2/vp.c

@@ -41,6 +41,11 @@ void __init omap_vp_init(struct voltagedomain *voltdm)
 	u32 val, sys_clk_rate, timeout, waittime;
 	u32 val, sys_clk_rate, timeout, waittime;
 	u32 vddmin, vddmax, vstepmin, vstepmax;
 	u32 vddmin, vddmax, vstepmin, vstepmax;
 
 
+	if (!voltdm->pmic || !voltdm->pmic->uv_to_vsel) {
+		pr_err("%s: No PMIC info for vdd_%s\n", __func__, voltdm->name);
+		return;
+	}
+
 	if (!voltdm->read || !voltdm->write) {
 	if (!voltdm->read || !voltdm->write) {
 		pr_err("%s: No read/write API for accessing vdd_%s regs\n",
 		pr_err("%s: No read/write API for accessing vdd_%s regs\n",
 			__func__, voltdm->name);
 			__func__, voltdm->name);

+ 1 - 1
drivers/mfd/Kconfig

@@ -200,7 +200,7 @@ config MENELAUS
 
 
 config TWL4030_CORE
 config TWL4030_CORE
 	bool "Texas Instruments TWL4030/TWL5030/TWL6030/TPS659x0 Support"
 	bool "Texas Instruments TWL4030/TWL5030/TWL6030/TPS659x0 Support"
-	depends on I2C=y && GENERIC_HARDIRQS && IRQ_DOMAIN
+	depends on I2C=y && GENERIC_HARDIRQS
 	help
 	help
 	  Say yes here if you have TWL4030 / TWL6030 family chip on your board.
 	  Say yes here if you have TWL4030 / TWL6030 family chip on your board.
 	  This core driver provides register access and IRQ handling
 	  This core driver provides register access and IRQ handling

+ 4 - 2
drivers/mfd/twl-core.c

@@ -263,7 +263,9 @@ struct twl_client {
 
 
 static struct twl_client twl_modules[TWL_NUM_SLAVES];
 static struct twl_client twl_modules[TWL_NUM_SLAVES];
 
 
+#ifdef CONFIG_IRQ_DOMAIN
 static struct irq_domain domain;
 static struct irq_domain domain;
+#endif
 
 
 /* mapping the module id to slave id and base address */
 /* mapping the module id to slave id and base address */
 struct twl_mapping {
 struct twl_mapping {
@@ -1226,13 +1228,13 @@ twl_probe(struct i2c_client *client, const struct i2c_device_id *id)
 	pdata->irq_base = status;
 	pdata->irq_base = status;
 	pdata->irq_end = pdata->irq_base + nr_irqs;
 	pdata->irq_end = pdata->irq_base + nr_irqs;
 
 
+#ifdef CONFIG_IRQ_DOMAIN
 	domain.irq_base = pdata->irq_base;
 	domain.irq_base = pdata->irq_base;
 	domain.nr_irq = nr_irqs;
 	domain.nr_irq = nr_irqs;
-#ifdef CONFIG_OF_IRQ
 	domain.of_node = of_node_get(node);
 	domain.of_node = of_node_get(node);
 	domain.ops = &irq_domain_simple_ops;
 	domain.ops = &irq_domain_simple_ops;
-#endif
 	irq_domain_add(&domain);
 	irq_domain_add(&domain);
+#endif
 
 
 	if (i2c_check_functionality(client->adapter, I2C_FUNC_I2C) == 0) {
 	if (i2c_check_functionality(client->adapter, I2C_FUNC_I2C) == 0) {
 		dev_dbg(&client->dev, "can't talk I2C?\n");
 		dev_dbg(&client->dev, "can't talk I2C?\n");

+ 5 - 0
drivers/video/omap2/dss/dpi.c

@@ -180,6 +180,11 @@ int omapdss_dpi_display_enable(struct omap_dss_device *dssdev)
 {
 {
 	int r;
 	int r;
 
 
+	if (cpu_is_omap34xx() && !dpi.vdds_dsi_reg) {
+		DSSERR("no VDSS_DSI regulator\n");
+		return -ENODEV;
+	}
+
 	if (dssdev->manager == NULL) {
 	if (dssdev->manager == NULL) {
 		DSSERR("failed to enable display: no manager\n");
 		DSSERR("failed to enable display: no manager\n");
 		return -ENODEV;
 		return -ENODEV;