Merge branch 'omap-fixes-for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/tmlind/linux-omap-2.6
* 'omap-fixes-for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/tmlind/linux-omap-2.6: arm: omap4: panda: remove usb_nop_xceiv_register(v1) OMAP1: Fix non-working LCD on OMAP310 OMAP3: Devkit8000: Change lcd power pin omap1: remove duplicated #include arm: mach-omap2: mux: free allocated memory on error exit arm: mach-omap2: board-rm680: fix rm680_vemmc regulator constraints OMAP: PM: SmartReflex: Fix possible null pointer read access OMAP: PM: SmartReflex: Fix possible memory leak arm: mach-omap2: voltage: debugfs: fix memory leak OMAP3: PM: fix save secure RAM to restore MPU power state OMAP: PM: SmartReflex: Add missing IS_ERR test
This commit is contained in:
@ -37,7 +37,7 @@ int omap_lcd_dma_running(void)
|
|||||||
* On OMAP1510, internal LCD controller will start the transfer
|
* On OMAP1510, internal LCD controller will start the transfer
|
||||||
* when it gets enabled, so assume DMA running if LCD enabled.
|
* when it gets enabled, so assume DMA running if LCD enabled.
|
||||||
*/
|
*/
|
||||||
if (cpu_is_omap1510())
|
if (cpu_is_omap15xx())
|
||||||
if (omap_readw(OMAP_LCDC_CONTROL) & OMAP_LCDC_CTRL_LCD_EN)
|
if (omap_readw(OMAP_LCDC_CONTROL) & OMAP_LCDC_CTRL_LCD_EN)
|
||||||
return 1;
|
return 1;
|
||||||
|
|
||||||
@ -95,7 +95,7 @@ EXPORT_SYMBOL(omap_set_lcd_dma_single_transfer);
|
|||||||
|
|
||||||
void omap_set_lcd_dma_b1_rotation(int rotate)
|
void omap_set_lcd_dma_b1_rotation(int rotate)
|
||||||
{
|
{
|
||||||
if (cpu_is_omap1510()) {
|
if (cpu_is_omap15xx()) {
|
||||||
printk(KERN_ERR "DMA rotation is not supported in 1510 mode\n");
|
printk(KERN_ERR "DMA rotation is not supported in 1510 mode\n");
|
||||||
BUG();
|
BUG();
|
||||||
return;
|
return;
|
||||||
@ -106,7 +106,7 @@ EXPORT_SYMBOL(omap_set_lcd_dma_b1_rotation);
|
|||||||
|
|
||||||
void omap_set_lcd_dma_b1_mirror(int mirror)
|
void omap_set_lcd_dma_b1_mirror(int mirror)
|
||||||
{
|
{
|
||||||
if (cpu_is_omap1510()) {
|
if (cpu_is_omap15xx()) {
|
||||||
printk(KERN_ERR "DMA mirror is not supported in 1510 mode\n");
|
printk(KERN_ERR "DMA mirror is not supported in 1510 mode\n");
|
||||||
BUG();
|
BUG();
|
||||||
}
|
}
|
||||||
@ -116,7 +116,7 @@ EXPORT_SYMBOL(omap_set_lcd_dma_b1_mirror);
|
|||||||
|
|
||||||
void omap_set_lcd_dma_b1_vxres(unsigned long vxres)
|
void omap_set_lcd_dma_b1_vxres(unsigned long vxres)
|
||||||
{
|
{
|
||||||
if (cpu_is_omap1510()) {
|
if (cpu_is_omap15xx()) {
|
||||||
printk(KERN_ERR "DMA virtual resulotion is not supported "
|
printk(KERN_ERR "DMA virtual resulotion is not supported "
|
||||||
"in 1510 mode\n");
|
"in 1510 mode\n");
|
||||||
BUG();
|
BUG();
|
||||||
@ -127,7 +127,7 @@ EXPORT_SYMBOL(omap_set_lcd_dma_b1_vxres);
|
|||||||
|
|
||||||
void omap_set_lcd_dma_b1_scale(unsigned int xscale, unsigned int yscale)
|
void omap_set_lcd_dma_b1_scale(unsigned int xscale, unsigned int yscale)
|
||||||
{
|
{
|
||||||
if (cpu_is_omap1510()) {
|
if (cpu_is_omap15xx()) {
|
||||||
printk(KERN_ERR "DMA scale is not supported in 1510 mode\n");
|
printk(KERN_ERR "DMA scale is not supported in 1510 mode\n");
|
||||||
BUG();
|
BUG();
|
||||||
}
|
}
|
||||||
@ -177,7 +177,7 @@ static void set_b1_regs(void)
|
|||||||
bottom = PIXADDR(lcd_dma.xres - 1, lcd_dma.yres - 1);
|
bottom = PIXADDR(lcd_dma.xres - 1, lcd_dma.yres - 1);
|
||||||
/* 1510 DMA requires the bottom address to be 2 more
|
/* 1510 DMA requires the bottom address to be 2 more
|
||||||
* than the actual last memory access location. */
|
* than the actual last memory access location. */
|
||||||
if (cpu_is_omap1510() &&
|
if (cpu_is_omap15xx() &&
|
||||||
lcd_dma.data_type == OMAP_DMA_DATA_TYPE_S32)
|
lcd_dma.data_type == OMAP_DMA_DATA_TYPE_S32)
|
||||||
bottom += 2;
|
bottom += 2;
|
||||||
ei = PIXSTEP(0, 0, 1, 0);
|
ei = PIXSTEP(0, 0, 1, 0);
|
||||||
@ -241,7 +241,7 @@ static void set_b1_regs(void)
|
|||||||
return; /* Suppress warning about uninitialized vars */
|
return; /* Suppress warning about uninitialized vars */
|
||||||
}
|
}
|
||||||
|
|
||||||
if (cpu_is_omap1510()) {
|
if (cpu_is_omap15xx()) {
|
||||||
omap_writew(top >> 16, OMAP1510_DMA_LCD_TOP_F1_U);
|
omap_writew(top >> 16, OMAP1510_DMA_LCD_TOP_F1_U);
|
||||||
omap_writew(top, OMAP1510_DMA_LCD_TOP_F1_L);
|
omap_writew(top, OMAP1510_DMA_LCD_TOP_F1_L);
|
||||||
omap_writew(bottom >> 16, OMAP1510_DMA_LCD_BOT_F1_U);
|
omap_writew(bottom >> 16, OMAP1510_DMA_LCD_BOT_F1_U);
|
||||||
@ -343,7 +343,7 @@ void omap_free_lcd_dma(void)
|
|||||||
BUG();
|
BUG();
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
if (!cpu_is_omap1510())
|
if (!cpu_is_omap15xx())
|
||||||
omap_writew(omap_readw(OMAP1610_DMA_LCD_CCR) & ~1,
|
omap_writew(omap_readw(OMAP1610_DMA_LCD_CCR) & ~1,
|
||||||
OMAP1610_DMA_LCD_CCR);
|
OMAP1610_DMA_LCD_CCR);
|
||||||
lcd_dma.reserved = 0;
|
lcd_dma.reserved = 0;
|
||||||
@ -360,7 +360,7 @@ void omap_enable_lcd_dma(void)
|
|||||||
* connected. Otherwise the OMAP internal controller will
|
* connected. Otherwise the OMAP internal controller will
|
||||||
* start the transfer when it gets enabled.
|
* start the transfer when it gets enabled.
|
||||||
*/
|
*/
|
||||||
if (cpu_is_omap1510() || !lcd_dma.ext_ctrl)
|
if (cpu_is_omap15xx() || !lcd_dma.ext_ctrl)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
w = omap_readw(OMAP1610_DMA_LCD_CTRL);
|
w = omap_readw(OMAP1610_DMA_LCD_CTRL);
|
||||||
@ -378,14 +378,14 @@ EXPORT_SYMBOL(omap_enable_lcd_dma);
|
|||||||
void omap_setup_lcd_dma(void)
|
void omap_setup_lcd_dma(void)
|
||||||
{
|
{
|
||||||
BUG_ON(lcd_dma.active);
|
BUG_ON(lcd_dma.active);
|
||||||
if (!cpu_is_omap1510()) {
|
if (!cpu_is_omap15xx()) {
|
||||||
/* Set some reasonable defaults */
|
/* Set some reasonable defaults */
|
||||||
omap_writew(0x5440, OMAP1610_DMA_LCD_CCR);
|
omap_writew(0x5440, OMAP1610_DMA_LCD_CCR);
|
||||||
omap_writew(0x9102, OMAP1610_DMA_LCD_CSDP);
|
omap_writew(0x9102, OMAP1610_DMA_LCD_CSDP);
|
||||||
omap_writew(0x0004, OMAP1610_DMA_LCD_LCH_CTRL);
|
omap_writew(0x0004, OMAP1610_DMA_LCD_LCH_CTRL);
|
||||||
}
|
}
|
||||||
set_b1_regs();
|
set_b1_regs();
|
||||||
if (!cpu_is_omap1510()) {
|
if (!cpu_is_omap15xx()) {
|
||||||
u16 w;
|
u16 w;
|
||||||
|
|
||||||
w = omap_readw(OMAP1610_DMA_LCD_CCR);
|
w = omap_readw(OMAP1610_DMA_LCD_CCR);
|
||||||
@ -407,7 +407,7 @@ void omap_stop_lcd_dma(void)
|
|||||||
u16 w;
|
u16 w;
|
||||||
|
|
||||||
lcd_dma.active = 0;
|
lcd_dma.active = 0;
|
||||||
if (cpu_is_omap1510() || !lcd_dma.ext_ctrl)
|
if (cpu_is_omap15xx() || !lcd_dma.ext_ctrl)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
w = omap_readw(OMAP1610_DMA_LCD_CCR);
|
w = omap_readw(OMAP1610_DMA_LCD_CCR);
|
||||||
|
@ -44,7 +44,6 @@
|
|||||||
#include <linux/clocksource.h>
|
#include <linux/clocksource.h>
|
||||||
#include <linux/clockchips.h>
|
#include <linux/clockchips.h>
|
||||||
#include <linux/io.h>
|
#include <linux/io.h>
|
||||||
#include <linux/sched.h>
|
|
||||||
|
|
||||||
#include <asm/system.h>
|
#include <asm/system.h>
|
||||||
#include <mach/hardware.h>
|
#include <mach/hardware.h>
|
||||||
|
@ -115,9 +115,6 @@ static struct omap2_hsmmc_info mmc[] = {
|
|||||||
|
|
||||||
static int devkit8000_panel_enable_lcd(struct omap_dss_device *dssdev)
|
static int devkit8000_panel_enable_lcd(struct omap_dss_device *dssdev)
|
||||||
{
|
{
|
||||||
twl_i2c_write_u8(TWL4030_MODULE_GPIO, 0x80, REG_GPIODATADIR1);
|
|
||||||
twl_i2c_write_u8(TWL4030_MODULE_LED, 0x0, 0x0);
|
|
||||||
|
|
||||||
if (gpio_is_valid(dssdev->reset_gpio))
|
if (gpio_is_valid(dssdev->reset_gpio))
|
||||||
gpio_set_value_cansleep(dssdev->reset_gpio, 1);
|
gpio_set_value_cansleep(dssdev->reset_gpio, 1);
|
||||||
return 0;
|
return 0;
|
||||||
@ -247,6 +244,8 @@ static struct gpio_led gpio_leds[];
|
|||||||
static int devkit8000_twl_gpio_setup(struct device *dev,
|
static int devkit8000_twl_gpio_setup(struct device *dev,
|
||||||
unsigned gpio, unsigned ngpio)
|
unsigned gpio, unsigned ngpio)
|
||||||
{
|
{
|
||||||
|
int ret;
|
||||||
|
|
||||||
omap_mux_init_gpio(29, OMAP_PIN_INPUT);
|
omap_mux_init_gpio(29, OMAP_PIN_INPUT);
|
||||||
/* gpio + 0 is "mmc0_cd" (input/IRQ) */
|
/* gpio + 0 is "mmc0_cd" (input/IRQ) */
|
||||||
mmc[0].gpio_cd = gpio + 0;
|
mmc[0].gpio_cd = gpio + 0;
|
||||||
@ -255,17 +254,23 @@ static int devkit8000_twl_gpio_setup(struct device *dev,
|
|||||||
/* TWL4030_GPIO_MAX + 1 == ledB, PMU_STAT (out, active low LED) */
|
/* TWL4030_GPIO_MAX + 1 == ledB, PMU_STAT (out, active low LED) */
|
||||||
gpio_leds[2].gpio = gpio + TWL4030_GPIO_MAX + 1;
|
gpio_leds[2].gpio = gpio + TWL4030_GPIO_MAX + 1;
|
||||||
|
|
||||||
/* gpio + 1 is "LCD_PWREN" (out, active high) */
|
/* TWL4030_GPIO_MAX + 0 is "LCD_PWREN" (out, active high) */
|
||||||
devkit8000_lcd_device.reset_gpio = gpio + 1;
|
devkit8000_lcd_device.reset_gpio = gpio + TWL4030_GPIO_MAX + 0;
|
||||||
gpio_request(devkit8000_lcd_device.reset_gpio, "LCD_PWREN");
|
ret = gpio_request_one(devkit8000_lcd_device.reset_gpio,
|
||||||
/* Disable until needed */
|
GPIOF_DIR_OUT | GPIOF_INIT_LOW, "LCD_PWREN");
|
||||||
gpio_direction_output(devkit8000_lcd_device.reset_gpio, 0);
|
if (ret < 0) {
|
||||||
|
devkit8000_lcd_device.reset_gpio = -EINVAL;
|
||||||
|
printk(KERN_ERR "Failed to request GPIO for LCD_PWRN\n");
|
||||||
|
}
|
||||||
|
|
||||||
/* gpio + 7 is "DVI_PD" (out, active low) */
|
/* gpio + 7 is "DVI_PD" (out, active low) */
|
||||||
devkit8000_dvi_device.reset_gpio = gpio + 7;
|
devkit8000_dvi_device.reset_gpio = gpio + 7;
|
||||||
gpio_request(devkit8000_dvi_device.reset_gpio, "DVI PowerDown");
|
ret = gpio_request_one(devkit8000_dvi_device.reset_gpio,
|
||||||
/* Disable until needed */
|
GPIOF_DIR_OUT | GPIOF_INIT_LOW, "DVI PowerDown");
|
||||||
gpio_direction_output(devkit8000_dvi_device.reset_gpio, 0);
|
if (ret < 0) {
|
||||||
|
devkit8000_dvi_device.reset_gpio = -EINVAL;
|
||||||
|
printk(KERN_ERR "Failed to request GPIO for DVI PowerDown\n");
|
||||||
|
}
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
@ -409,8 +409,6 @@ static void __init omap4_panda_init(void)
|
|||||||
platform_add_devices(panda_devices, ARRAY_SIZE(panda_devices));
|
platform_add_devices(panda_devices, ARRAY_SIZE(panda_devices));
|
||||||
omap_serial_init();
|
omap_serial_init();
|
||||||
omap4_twl6030_hsmmc_init(mmc);
|
omap4_twl6030_hsmmc_init(mmc);
|
||||||
/* OMAP4 Panda uses internal transceiver so register nop transceiver */
|
|
||||||
usb_nop_xceiv_register();
|
|
||||||
omap4_ehci_init();
|
omap4_ehci_init();
|
||||||
usb_musb_init(&musb_board_data);
|
usb_musb_init(&musb_board_data);
|
||||||
}
|
}
|
||||||
|
@ -40,9 +40,6 @@ static struct regulator_consumer_supply rm680_vemmc_consumers[] = {
|
|||||||
static struct regulator_init_data rm680_vemmc = {
|
static struct regulator_init_data rm680_vemmc = {
|
||||||
.constraints = {
|
.constraints = {
|
||||||
.name = "rm680_vemmc",
|
.name = "rm680_vemmc",
|
||||||
.min_uV = 2900000,
|
|
||||||
.max_uV = 2900000,
|
|
||||||
.apply_uV = 1,
|
|
||||||
.valid_modes_mask = REGULATOR_MODE_NORMAL
|
.valid_modes_mask = REGULATOR_MODE_NORMAL
|
||||||
| REGULATOR_MODE_STANDBY,
|
| REGULATOR_MODE_STANDBY,
|
||||||
.valid_ops_mask = REGULATOR_CHANGE_STATUS
|
.valid_ops_mask = REGULATOR_CHANGE_STATUS
|
||||||
|
@ -1000,6 +1000,7 @@ int __init omap_mux_init(const char *name, u32 flags,
|
|||||||
if (!partition->base) {
|
if (!partition->base) {
|
||||||
pr_err("%s: Could not ioremap mux partition at 0x%08x\n",
|
pr_err("%s: Could not ioremap mux partition at 0x%08x\n",
|
||||||
__func__, partition->phys);
|
__func__, partition->phys);
|
||||||
|
kfree(partition);
|
||||||
return -ENODEV;
|
return -ENODEV;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -168,9 +168,10 @@ static void omap3_core_restore_context(void)
|
|||||||
* once during boot sequence, but this works as we are not using secure
|
* once during boot sequence, but this works as we are not using secure
|
||||||
* services.
|
* services.
|
||||||
*/
|
*/
|
||||||
static void omap3_save_secure_ram_context(u32 target_mpu_state)
|
static void omap3_save_secure_ram_context(void)
|
||||||
{
|
{
|
||||||
u32 ret;
|
u32 ret;
|
||||||
|
int mpu_next_state = pwrdm_read_next_pwrst(mpu_pwrdm);
|
||||||
|
|
||||||
if (omap_type() != OMAP2_DEVICE_TYPE_GP) {
|
if (omap_type() != OMAP2_DEVICE_TYPE_GP) {
|
||||||
/*
|
/*
|
||||||
@ -181,7 +182,7 @@ static void omap3_save_secure_ram_context(u32 target_mpu_state)
|
|||||||
pwrdm_set_next_pwrst(mpu_pwrdm, PWRDM_POWER_ON);
|
pwrdm_set_next_pwrst(mpu_pwrdm, PWRDM_POWER_ON);
|
||||||
ret = _omap_save_secure_sram((u32 *)
|
ret = _omap_save_secure_sram((u32 *)
|
||||||
__pa(omap3_secure_ram_storage));
|
__pa(omap3_secure_ram_storage));
|
||||||
pwrdm_set_next_pwrst(mpu_pwrdm, target_mpu_state);
|
pwrdm_set_next_pwrst(mpu_pwrdm, mpu_next_state);
|
||||||
/* Following is for error tracking, it should not happen */
|
/* Following is for error tracking, it should not happen */
|
||||||
if (ret) {
|
if (ret) {
|
||||||
printk(KERN_ERR "save_secure_sram() returns %08x\n",
|
printk(KERN_ERR "save_secure_sram() returns %08x\n",
|
||||||
@ -1094,7 +1095,7 @@ static int __init omap3_pm_init(void)
|
|||||||
local_fiq_disable();
|
local_fiq_disable();
|
||||||
|
|
||||||
omap_dma_global_context_save();
|
omap_dma_global_context_save();
|
||||||
omap3_save_secure_ram_context(PWRDM_POWER_ON);
|
omap3_save_secure_ram_context();
|
||||||
omap_dma_global_context_restore();
|
omap_dma_global_context_restore();
|
||||||
|
|
||||||
local_irq_enable();
|
local_irq_enable();
|
||||||
|
@ -780,8 +780,7 @@ static int omap_sr_autocomp_show(void *data, u64 *val)
|
|||||||
struct omap_sr *sr_info = (struct omap_sr *) data;
|
struct omap_sr *sr_info = (struct omap_sr *) data;
|
||||||
|
|
||||||
if (!sr_info) {
|
if (!sr_info) {
|
||||||
pr_warning("%s: omap_sr struct for sr_%s not found\n",
|
pr_warning("%s: omap_sr struct not found\n", __func__);
|
||||||
__func__, sr_info->voltdm->name);
|
|
||||||
return -EINVAL;
|
return -EINVAL;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -795,8 +794,7 @@ static int omap_sr_autocomp_store(void *data, u64 val)
|
|||||||
struct omap_sr *sr_info = (struct omap_sr *) data;
|
struct omap_sr *sr_info = (struct omap_sr *) data;
|
||||||
|
|
||||||
if (!sr_info) {
|
if (!sr_info) {
|
||||||
pr_warning("%s: omap_sr struct for sr_%s not found\n",
|
pr_warning("%s: omap_sr struct not found\n", __func__);
|
||||||
__func__, sr_info->voltdm->name);
|
|
||||||
return -EINVAL;
|
return -EINVAL;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -834,7 +832,8 @@ static int __init omap_sr_probe(struct platform_device *pdev)
|
|||||||
|
|
||||||
if (!pdata) {
|
if (!pdata) {
|
||||||
dev_err(&pdev->dev, "%s: platform data missing\n", __func__);
|
dev_err(&pdev->dev, "%s: platform data missing\n", __func__);
|
||||||
return -EINVAL;
|
ret = -EINVAL;
|
||||||
|
goto err_free_devinfo;
|
||||||
}
|
}
|
||||||
|
|
||||||
mem = platform_get_resource(pdev, IORESOURCE_MEM, 0);
|
mem = platform_get_resource(pdev, IORESOURCE_MEM, 0);
|
||||||
@ -966,7 +965,7 @@ static int __devexit omap_sr_remove(struct platform_device *pdev)
|
|||||||
}
|
}
|
||||||
|
|
||||||
sr_info = _sr_lookup(pdata->voltdm);
|
sr_info = _sr_lookup(pdata->voltdm);
|
||||||
if (!sr_info) {
|
if (IS_ERR(sr_info)) {
|
||||||
dev_warn(&pdev->dev, "%s: omap_sr struct not found\n",
|
dev_warn(&pdev->dev, "%s: omap_sr struct not found\n",
|
||||||
__func__);
|
__func__);
|
||||||
return -EINVAL;
|
return -EINVAL;
|
||||||
|
@ -471,6 +471,7 @@ static void __init vdd_debugfs_init(struct omap_vdd_info *vdd)
|
|||||||
strcat(name, vdd->voltdm.name);
|
strcat(name, vdd->voltdm.name);
|
||||||
|
|
||||||
vdd->debug_dir = debugfs_create_dir(name, voltage_dir);
|
vdd->debug_dir = debugfs_create_dir(name, voltage_dir);
|
||||||
|
kfree(name);
|
||||||
if (IS_ERR(vdd->debug_dir)) {
|
if (IS_ERR(vdd->debug_dir)) {
|
||||||
pr_warning("%s: Unable to create debugfs directory for"
|
pr_warning("%s: Unable to create debugfs directory for"
|
||||||
" vdd_%s\n", __func__, vdd->voltdm.name);
|
" vdd_%s\n", __func__, vdd->voltdm.name);
|
||||||
|
Reference in New Issue
Block a user