Merge branch 'omap-fixes-for-linus' of git://git.kernel.org/pub/scm/linux/kernel...
authorLinus Torvalds <torvalds@linux-foundation.org>
Mon, 28 Mar 2011 03:03:12 +0000 (20:03 -0700)
committerLinus Torvalds <torvalds@linux-foundation.org>
Mon, 28 Mar 2011 03:03:12 +0000 (20:03 -0700)
* 'omap-fixes-for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/tmlind/linux-omap-2.6:
  hwspinlock: depend on OMAP4
  ARM: OMAP2+: Fix warnings for GPMC interrupt
  OMAP4: PandaBoard: remove unused power regulators
  arm: mach-omap2: omap_l3_smx: fix irq handler setup
  arm: mach-omap2: devices: fix omap3_l3_init() return value

1  2 
arch/arm/mach-omap2/board-omap4panda.c
arch/arm/mach-omap2/devices.c

  #include <asm/mach-types.h>
  #include <asm/mach/arch.h>
  #include <asm/mach/map.h>
 +#include <plat/display.h>
  
  #include <plat/board.h>
  #include <plat/common.h>
  #include <plat/usb.h>
  #include <plat/mmc.h>
 +#include <plat/panel-generic-dpi.h>
  #include "timer-gp.h"
  
  #include "hsmmc.h"
@@@ -51,8 -49,6 +51,8 @@@
  #define GPIO_HUB_NRESET               62
  #define GPIO_WIFI_PMENA               43
  #define GPIO_WIFI_IRQ         53
 +#define HDMI_GPIO_HPD 60 /* Hot plug pin for HDMI */
 +#define HDMI_GPIO_LS_OE 41 /* Level shifter for HDMI */
  
  /* wl127x BT, FM, GPS connectivity chip */
  static int wl1271_gpios[] = {46, -1, -1};
@@@ -101,10 -97,10 +101,10 @@@ static void __init omap4_panda_init_ear
        omap2_init_common_devices(NULL, NULL);
  }
  
 -static const struct ehci_hcd_omap_platform_data ehci_pdata __initconst = {
 -      .port_mode[0] = EHCI_HCD_OMAP_MODE_PHY,
 -      .port_mode[1] = EHCI_HCD_OMAP_MODE_UNKNOWN,
 -      .port_mode[2] = EHCI_HCD_OMAP_MODE_UNKNOWN,
 +static const struct usbhs_omap_board_data usbhs_bdata __initconst = {
 +      .port_mode[0] = OMAP_EHCI_PORT_MODE_PHY,
 +      .port_mode[1] = OMAP_USBHS_PORT_MODE_UNUSED,
 +      .port_mode[2] = OMAP_USBHS_PORT_MODE_UNUSED,
        .phy_reset  = false,
        .reset_gpio_port[0]  = -EINVAL,
        .reset_gpio_port[1]  = -EINVAL,
@@@ -146,7 -142,7 +146,7 @@@ static void __init omap4_ehci_init(void
        gpio_set_value(GPIO_HUB_NRESET, 0);
        gpio_set_value(GPIO_HUB_NRESET, 1);
  
 -      usb_ehci_init(&ehci_pdata);
 +      usbhs_init(&usbhs_bdata);
  
        /* enable power to hub */
        gpio_set_value(GPIO_HUB_POWER, 1);
@@@ -171,7 -167,6 +171,7 @@@ static struct twl4030_usb_data omap4_us
        .phy_exit       = omap4430_phy_exit,
        .phy_power      = omap4430_phy_power,
        .phy_set_clock  = omap4430_phy_set_clk,
 +      .phy_suspend    = omap4430_phy_suspend,
  };
  
  static struct omap2_hsmmc_info mmc[] = {
@@@ -285,19 -280,6 +285,6 @@@ static int __init omap4_twl6030_hsmmc_i
        return 0;
  }
  
- static struct regulator_init_data omap4_panda_vaux1 = {
-       .constraints = {
-               .min_uV                 = 1000000,
-               .max_uV                 = 3000000,
-               .apply_uV               = true,
-               .valid_modes_mask       = REGULATOR_MODE_NORMAL
-                                       | REGULATOR_MODE_STANDBY,
-               .valid_ops_mask  = REGULATOR_CHANGE_VOLTAGE
-                                       | REGULATOR_CHANGE_MODE
-                                       | REGULATOR_CHANGE_STATUS,
-       },
- };
  static struct regulator_init_data omap4_panda_vaux2 = {
        .constraints = {
                .min_uV                 = 1200000,
@@@ -353,19 -335,6 +340,6 @@@ static struct regulator_init_data omap4
        },
  };
  
- static struct regulator_init_data omap4_panda_vusim = {
-       .constraints = {
-               .min_uV                 = 1200000,
-               .max_uV                 = 2900000,
-               .apply_uV               = true,
-               .valid_modes_mask       = REGULATOR_MODE_NORMAL
-                                       | REGULATOR_MODE_STANDBY,
-               .valid_ops_mask  = REGULATOR_CHANGE_VOLTAGE
-                                       | REGULATOR_CHANGE_MODE
-                                       | REGULATOR_CHANGE_STATUS,
-       },
- };
  static struct regulator_init_data omap4_panda_vana = {
        .constraints = {
                .min_uV                 = 2100000,
@@@ -411,12 -380,6 +385,12 @@@ static struct regulator_init_data omap4
        },
  };
  
 +static struct regulator_init_data omap4_panda_clk32kg = {
 +      .constraints = {
 +              .valid_ops_mask         = REGULATOR_CHANGE_STATUS,
 +      },
 +};
 +
  static struct twl4030_platform_data omap4_panda_twldata = {
        .irq_base       = TWL6030_IRQ_BASE,
        .irq_end        = TWL6030_IRQ_END,
        /* Regulators */
        .vmmc           = &omap4_panda_vmmc,
        .vpp            = &omap4_panda_vpp,
-       .vusim          = &omap4_panda_vusim,
        .vana           = &omap4_panda_vana,
        .vcxio          = &omap4_panda_vcxio,
        .vdac           = &omap4_panda_vdac,
        .vusb           = &omap4_panda_vusb,
-       .vaux1          = &omap4_panda_vaux1,
        .vaux2          = &omap4_panda_vaux2,
        .vaux3          = &omap4_panda_vaux3,
 +      .clk32kg        = &omap4_panda_clk32kg,
        .usb            = &omap4_usbphy_data,
  };
  
@@@ -444,17 -404,6 +416,17 @@@ static struct i2c_board_info __initdat
                .platform_data = &omap4_panda_twldata,
        },
  };
 +
 +/*
 + * Display monitor features are burnt in their EEPROM as EDID data. The EEPROM
 + * is connected as I2C slave device, and can be accessed at address 0x50
 + */
 +static struct i2c_board_info __initdata panda_i2c_eeprom[] = {
 +      {
 +              I2C_BOARD_INFO("eeprom", 0x50),
 +      },
 +};
 +
  static int __init omap4_panda_i2c_init(void)
  {
        /*
        omap_register_i2c_bus(1, 400, omap4_panda_i2c_boardinfo,
                        ARRAY_SIZE(omap4_panda_i2c_boardinfo));
        omap_register_i2c_bus(2, 400, NULL, 0);
 -      omap_register_i2c_bus(3, 400, NULL, 0);
 +      /*
 +       * Bus 3 is attached to the DVI port where devices like the pico DLP
 +       * projector don't work reliably with 400kHz
 +       */
 +      omap_register_i2c_bus(3, 100, panda_i2c_eeprom,
 +                                      ARRAY_SIZE(panda_i2c_eeprom));
        omap_register_i2c_bus(4, 400, NULL, 0);
        return 0;
  }
@@@ -489,64 -433,6 +461,64 @@@ static struct omap_board_mux board_mux[
        OMAP4_MUX(SDMMC5_DAT1, OMAP_MUX_MODE0 | OMAP_PIN_INPUT_PULLUP),
        OMAP4_MUX(SDMMC5_DAT2, OMAP_MUX_MODE0 | OMAP_PIN_INPUT_PULLUP),
        OMAP4_MUX(SDMMC5_DAT3, OMAP_MUX_MODE0 | OMAP_PIN_INPUT_PULLUP),
 +      /* gpio 0 - TFP410 PD */
 +      OMAP4_MUX(KPD_COL1, OMAP_PIN_OUTPUT | OMAP_MUX_MODE3),
 +      /* dispc2_data23 */
 +      OMAP4_MUX(USBB2_ULPITLL_STP, OMAP_PIN_OUTPUT | OMAP_MUX_MODE5),
 +      /* dispc2_data22 */
 +      OMAP4_MUX(USBB2_ULPITLL_DIR, OMAP_PIN_OUTPUT | OMAP_MUX_MODE5),
 +      /* dispc2_data21 */
 +      OMAP4_MUX(USBB2_ULPITLL_NXT, OMAP_PIN_OUTPUT | OMAP_MUX_MODE5),
 +      /* dispc2_data20 */
 +      OMAP4_MUX(USBB2_ULPITLL_DAT0, OMAP_PIN_OUTPUT | OMAP_MUX_MODE5),
 +      /* dispc2_data19 */
 +      OMAP4_MUX(USBB2_ULPITLL_DAT1, OMAP_PIN_OUTPUT | OMAP_MUX_MODE5),
 +      /* dispc2_data18 */
 +      OMAP4_MUX(USBB2_ULPITLL_DAT2, OMAP_PIN_OUTPUT | OMAP_MUX_MODE5),
 +      /* dispc2_data15 */
 +      OMAP4_MUX(USBB2_ULPITLL_DAT3, OMAP_PIN_OUTPUT | OMAP_MUX_MODE5),
 +      /* dispc2_data14 */
 +      OMAP4_MUX(USBB2_ULPITLL_DAT4, OMAP_PIN_OUTPUT | OMAP_MUX_MODE5),
 +      /* dispc2_data13 */
 +      OMAP4_MUX(USBB2_ULPITLL_DAT5, OMAP_PIN_OUTPUT | OMAP_MUX_MODE5),
 +      /* dispc2_data12 */
 +      OMAP4_MUX(USBB2_ULPITLL_DAT6, OMAP_PIN_OUTPUT | OMAP_MUX_MODE5),
 +      /* dispc2_data11 */
 +      OMAP4_MUX(USBB2_ULPITLL_DAT7, OMAP_PIN_OUTPUT | OMAP_MUX_MODE5),
 +      /* dispc2_data10 */
 +      OMAP4_MUX(DPM_EMU3, OMAP_PIN_OUTPUT | OMAP_MUX_MODE5),
 +      /* dispc2_data9 */
 +      OMAP4_MUX(DPM_EMU4, OMAP_PIN_OUTPUT | OMAP_MUX_MODE5),
 +      /* dispc2_data16 */
 +      OMAP4_MUX(DPM_EMU5, OMAP_PIN_OUTPUT | OMAP_MUX_MODE5),
 +      /* dispc2_data17 */
 +      OMAP4_MUX(DPM_EMU6, OMAP_PIN_OUTPUT | OMAP_MUX_MODE5),
 +      /* dispc2_hsync */
 +      OMAP4_MUX(DPM_EMU7, OMAP_PIN_OUTPUT | OMAP_MUX_MODE5),
 +      /* dispc2_pclk */
 +      OMAP4_MUX(DPM_EMU8, OMAP_PIN_OUTPUT | OMAP_MUX_MODE5),
 +      /* dispc2_vsync */
 +      OMAP4_MUX(DPM_EMU9, OMAP_PIN_OUTPUT | OMAP_MUX_MODE5),
 +      /* dispc2_de */
 +      OMAP4_MUX(DPM_EMU10, OMAP_PIN_OUTPUT | OMAP_MUX_MODE5),
 +      /* dispc2_data8 */
 +      OMAP4_MUX(DPM_EMU11, OMAP_PIN_OUTPUT | OMAP_MUX_MODE5),
 +      /* dispc2_data7 */
 +      OMAP4_MUX(DPM_EMU12, OMAP_PIN_OUTPUT | OMAP_MUX_MODE5),
 +      /* dispc2_data6 */
 +      OMAP4_MUX(DPM_EMU13, OMAP_PIN_OUTPUT | OMAP_MUX_MODE5),
 +      /* dispc2_data5 */
 +      OMAP4_MUX(DPM_EMU14, OMAP_PIN_OUTPUT | OMAP_MUX_MODE5),
 +      /* dispc2_data4 */
 +      OMAP4_MUX(DPM_EMU15, OMAP_PIN_OUTPUT | OMAP_MUX_MODE5),
 +      /* dispc2_data3 */
 +      OMAP4_MUX(DPM_EMU16, OMAP_PIN_OUTPUT | OMAP_MUX_MODE5),
 +      /* dispc2_data2 */
 +      OMAP4_MUX(DPM_EMU17, OMAP_PIN_OUTPUT | OMAP_MUX_MODE5),
 +      /* dispc2_data1 */
 +      OMAP4_MUX(DPM_EMU18, OMAP_PIN_OUTPUT | OMAP_MUX_MODE5),
 +      /* dispc2_data0 */
 +      OMAP4_MUX(DPM_EMU19, OMAP_PIN_OUTPUT | OMAP_MUX_MODE5),
        { .reg_offset = OMAP_MUX_TERMINATOR },
  };
  
@@@ -620,128 -506,6 +592,128 @@@ static inline void board_serial_init(vo
  }
  #endif
  
 +/* Display DVI */
 +#define PANDA_DVI_TFP410_POWER_DOWN_GPIO      0
 +
 +static int omap4_panda_enable_dvi(struct omap_dss_device *dssdev)
 +{
 +      gpio_set_value(dssdev->reset_gpio, 1);
 +      return 0;
 +}
 +
 +static void omap4_panda_disable_dvi(struct omap_dss_device *dssdev)
 +{
 +      gpio_set_value(dssdev->reset_gpio, 0);
 +}
 +
 +/* Using generic display panel */
 +static struct panel_generic_dpi_data omap4_dvi_panel = {
 +      .name                   = "generic",
 +      .platform_enable        = omap4_panda_enable_dvi,
 +      .platform_disable       = omap4_panda_disable_dvi,
 +};
 +
 +struct omap_dss_device omap4_panda_dvi_device = {
 +      .type                   = OMAP_DISPLAY_TYPE_DPI,
 +      .name                   = "dvi",
 +      .driver_name            = "generic_dpi_panel",
 +      .data                   = &omap4_dvi_panel,
 +      .phy.dpi.data_lines     = 24,
 +      .reset_gpio             = PANDA_DVI_TFP410_POWER_DOWN_GPIO,
 +      .channel                = OMAP_DSS_CHANNEL_LCD2,
 +};
 +
 +int __init omap4_panda_dvi_init(void)
 +{
 +      int r;
 +
 +      /* Requesting TFP410 DVI GPIO and disabling it, at bootup */
 +      r = gpio_request_one(omap4_panda_dvi_device.reset_gpio,
 +                              GPIOF_OUT_INIT_LOW, "DVI PD");
 +      if (r)
 +              pr_err("Failed to get DVI powerdown GPIO\n");
 +
 +      return r;
 +}
 +
 +
 +static void omap4_panda_hdmi_mux_init(void)
 +{
 +      /* PAD0_HDMI_HPD_PAD1_HDMI_CEC */
 +      omap_mux_init_signal("hdmi_hpd",
 +                      OMAP_PIN_INPUT_PULLUP);
 +      omap_mux_init_signal("hdmi_cec",
 +                      OMAP_PIN_INPUT_PULLUP);
 +      /* PAD0_HDMI_DDC_SCL_PAD1_HDMI_DDC_SDA */
 +      omap_mux_init_signal("hdmi_ddc_scl",
 +                      OMAP_PIN_INPUT_PULLUP);
 +      omap_mux_init_signal("hdmi_ddc_sda",
 +                      OMAP_PIN_INPUT_PULLUP);
 +}
 +
 +static int omap4_panda_panel_enable_hdmi(struct omap_dss_device *dssdev)
 +{
 +      int status;
 +
 +      status = gpio_request_one(HDMI_GPIO_HPD, GPIOF_OUT_INIT_HIGH,
 +                                                      "hdmi_gpio_hpd");
 +      if (status) {
 +              pr_err("Cannot request GPIO %d\n", HDMI_GPIO_HPD);
 +              return status;
 +      }
 +      status = gpio_request_one(HDMI_GPIO_LS_OE, GPIOF_OUT_INIT_HIGH,
 +                                                      "hdmi_gpio_ls_oe");
 +      if (status) {
 +              pr_err("Cannot request GPIO %d\n", HDMI_GPIO_LS_OE);
 +              goto error1;
 +      }
 +
 +      return 0;
 +
 +error1:
 +      gpio_free(HDMI_GPIO_HPD);
 +
 +      return status;
 +}
 +
 +static void omap4_panda_panel_disable_hdmi(struct omap_dss_device *dssdev)
 +{
 +      gpio_free(HDMI_GPIO_LS_OE);
 +      gpio_free(HDMI_GPIO_HPD);
 +}
 +
 +static struct omap_dss_device  omap4_panda_hdmi_device = {
 +      .name = "hdmi",
 +      .driver_name = "hdmi_panel",
 +      .type = OMAP_DISPLAY_TYPE_HDMI,
 +      .platform_enable = omap4_panda_panel_enable_hdmi,
 +      .platform_disable = omap4_panda_panel_disable_hdmi,
 +      .channel = OMAP_DSS_CHANNEL_DIGIT,
 +};
 +
 +static struct omap_dss_device *omap4_panda_dss_devices[] = {
 +      &omap4_panda_dvi_device,
 +      &omap4_panda_hdmi_device,
 +};
 +
 +static struct omap_dss_board_info omap4_panda_dss_data = {
 +      .num_devices    = ARRAY_SIZE(omap4_panda_dss_devices),
 +      .devices        = omap4_panda_dss_devices,
 +      .default_device = &omap4_panda_dvi_device,
 +};
 +
 +void omap4_panda_display_init(void)
 +{
 +      int r;
 +
 +      r = omap4_panda_dvi_init();
 +      if (r)
 +              pr_err("error initializing panda DVI\n");
 +
 +      omap4_panda_hdmi_mux_init();
 +      omap_display_init(&omap4_panda_dss_data);
 +}
 +
  static void __init omap4_panda_init(void)
  {
        int package = OMAP_PACKAGE_CBS;
        omap4_twl6030_hsmmc_init(mmc);
        omap4_ehci_init();
        usb_musb_init(&musb_board_data);
 +      omap4_panda_display_init();
  }
  
  static void __init omap4_panda_map_io(void)
@@@ -35,7 -35,6 +35,7 @@@
  
  #include "mux.h"
  #include "control.h"
 +#include "devices.h"
  
  #define L3_MODULES_MAX_LEN 12
  #define L3_MODULES 3
@@@ -66,7 -65,7 +66,7 @@@ static int __init omap3_l3_init(void
  
        WARN(IS_ERR(od), "could not build omap_device for %s\n", oh_name);
  
-       return PTR_ERR(od);
+       return IS_ERR(od) ? PTR_ERR(od) : 0;
  }
  postcore_initcall(omap3_l3_init);
  
@@@ -103,7 -102,7 +103,7 @@@ postcore_initcall(omap4_l3_init)
  
  #if defined(CONFIG_VIDEO_OMAP2) || defined(CONFIG_VIDEO_OMAP2_MODULE)
  
 -static struct resource cam_resources[] = {
 +static struct resource omap2cam_resources[] = {
        {
                .start          = OMAP24XX_CAMERA_BASE,
                .end            = OMAP24XX_CAMERA_BASE + 0xfff,
        }
  };
  
 -static struct platform_device omap_cam_device = {
 +static struct platform_device omap2cam_device = {
        .name           = "omap24xxcam",
        .id             = -1,
 -      .num_resources  = ARRAY_SIZE(cam_resources),
 -      .resource       = cam_resources,
 +      .num_resources  = ARRAY_SIZE(omap2cam_resources),
 +      .resource       = omap2cam_resources,
  };
 -
 -static inline void omap_init_camera(void)
 -{
 -      platform_device_register(&omap_cam_device);
 -}
 -
 -#elif defined(CONFIG_VIDEO_OMAP3) || defined(CONFIG_VIDEO_OMAP3_MODULE)
 +#endif
  
  static struct resource omap3isp_resources[] = {
        {
                .end            = OMAP3430_ISP_END,
                .flags          = IORESOURCE_MEM,
        },
 -      {
 -              .start          = OMAP3430_ISP_CBUFF_BASE,
 -              .end            = OMAP3430_ISP_CBUFF_END,
 -              .flags          = IORESOURCE_MEM,
 -      },
        {
                .start          = OMAP3430_ISP_CCP2_BASE,
                .end            = OMAP3430_ISP_CCP2_END,
                .flags          = IORESOURCE_MEM,
        },
        {
 -              .start          = OMAP3430_ISP_CSI2A_BASE,
 -              .end            = OMAP3430_ISP_CSI2A_END,
 +              .start          = OMAP3430_ISP_CSI2A_REGS1_BASE,
 +              .end            = OMAP3430_ISP_CSI2A_REGS1_END,
 +              .flags          = IORESOURCE_MEM,
 +      },
 +      {
 +              .start          = OMAP3430_ISP_CSIPHY2_BASE,
 +              .end            = OMAP3430_ISP_CSIPHY2_END,
 +              .flags          = IORESOURCE_MEM,
 +      },
 +      {
 +              .start          = OMAP3630_ISP_CSI2A_REGS2_BASE,
 +              .end            = OMAP3630_ISP_CSI2A_REGS2_END,
                .flags          = IORESOURCE_MEM,
        },
        {
 -              .start          = OMAP3430_ISP_CSI2PHY_BASE,
 -              .end            = OMAP3430_ISP_CSI2PHY_END,
 +              .start          = OMAP3630_ISP_CSI2C_REGS1_BASE,
 +              .end            = OMAP3630_ISP_CSI2C_REGS1_END,
 +              .flags          = IORESOURCE_MEM,
 +      },
 +      {
 +              .start          = OMAP3630_ISP_CSIPHY1_BASE,
 +              .end            = OMAP3630_ISP_CSIPHY1_END,
 +              .flags          = IORESOURCE_MEM,
 +      },
 +      {
 +              .start          = OMAP3630_ISP_CSI2C_REGS2_BASE,
 +              .end            = OMAP3630_ISP_CSI2C_REGS2_END,
                .flags          = IORESOURCE_MEM,
        },
        {
@@@ -207,19 -197,15 +207,19 @@@ static struct platform_device omap3isp_
        .resource       = omap3isp_resources,
  };
  
 -static inline void omap_init_camera(void)
 +int omap3_init_camera(struct isp_platform_data *pdata)
  {
 -      platform_device_register(&omap3isp_device);
 +      omap3isp_device.dev.platform_data = pdata;
 +      return platform_device_register(&omap3isp_device);
  }
 -#else
 +
  static inline void omap_init_camera(void)
  {
 -}
 +#if defined(CONFIG_VIDEO_OMAP2) || defined(CONFIG_VIDEO_OMAP2_MODULE)
 +      if (cpu_is_omap24xx())
 +              platform_device_register(&omap2cam_device);
  #endif
 +}
  
  struct omap_device_pm_latency omap_keyboard_latency[] = {
        {