Changeset 16609


Ignore:
Timestamp:
2009-06-28T22:25:00+02:00 (7 years ago)
Author:
lars
Message:

[s3c24xx] Fix freerunner gsm modem pm.

Location:
trunk/target/linux/s3c24xx
Files:
1 added
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/target/linux/s3c24xx/files-2.6.30/arch/arm/mach-s3c2442/gta02-pm-gsm.c

    r15918 r16609  
    2020#include <linux/interrupt.h> 
    2121#include <linux/delay.h> 
    22 #include <linux/gta02-shadow.h> 
    2322 
    2423#include <mach/gpio.h> 
     
    3231#include <mach/regs-gpio.h> 
    3332#include <mach/regs-gpioj.h> 
     33#include <linux/gta02-shadow.h> 
    3434 
    3535int gta_gsm_interrupts; 
    3636EXPORT_SYMBOL(gta_gsm_interrupts); 
    3737 
     38extern void s3c24xx_serial_console_set_silence(int); 
     39 
    3840struct gta02pm_priv { 
    3941        int gpio_ndl_gsm; 
     42        struct console *con; 
    4043}; 
    4144 
    4245static struct gta02pm_priv gta02_gsm; 
     46 
     47static struct console *find_s3c24xx_console(void) 
     48{ 
     49        struct console *con; 
     50 
     51        acquire_console_sem(); 
     52 
     53        for (con = console_drivers; con; con = con->next) { 
     54                if (!strcmp(con->name, "ttySAC")) 
     55                        break; 
     56        } 
     57 
     58        release_console_sem(); 
     59 
     60        return con; 
     61} 
    4362 
    4463static ssize_t gsm_read(struct device *dev, struct device_attribute *attr, 
     
    6483{ 
    6584        if (!on) { 
    66                 /* 
    67                  * Do not drive into powered-down GSM side 
    68                  * GTA02 only, because on GTA01 maybe serial 
    69                  * is used otherwise. 
    70                  */ 
    7185                s3c2410_gpio_cfgpin(S3C2410_GPH1, S3C2410_GPIO_INPUT); 
    7286                s3c2410_gpio_cfgpin(S3C2410_GPH2, S3C2410_GPIO_INPUT); 
     
    7488                pcf50633_gpio_set(gta02_pcf, PCF50633_GPIO2, 0); 
    7589 
     90                if (gta02_gsm.con) { 
     91                        s3c24xx_serial_console_set_silence(0); 
     92                        console_start(gta02_gsm.con); 
     93 
     94                        dev_dbg(dev, "powered down gta02 GSM, enabling " 
     95                                        "serial console\n"); 
     96                } 
     97 
    7698                return; 
     99        } 
     100 
     101        if (gta02_gsm.con) { 
     102                dev_dbg(dev, "powering up GSM, thus " 
     103                                "disconnecting serial console\n"); 
     104 
     105                console_stop(gta02_gsm.con); 
     106                s3c24xx_serial_console_set_silence(1); 
    77107        } 
    78108 
     
    84114 
    85115        msleep(100); 
     116 
     117        gta02_gpb_setpin(GTA02_GPIO_MODEM_ON, 1); 
     118        msleep(500); 
     119        gta02_gpb_setpin(GTA02_GPIO_MODEM_ON, 0); 
    86120 
    87121        /* 
     
    189223         * don't need to do much here. */ 
    190224 
     225        /* Make sure that the kernel console on the serial port is still 
     226         * disabled. FIXME: resume ordering race with serial driver! */ 
     227        if (gta02_gsm.con && s3c2410_gpio_getpin(GTA02_GPIO_MODEM_ON)) 
     228                console_stop(gta02_gsm.con); 
     229 
    191230        s3c2410_gpio_setpin(GTA02_GPIO_nDL_GSM, gta02_gsm.gpio_ndl_gsm); 
    192231 
     
    223262                break; 
    224263        default: 
    225                 /* TODO: fail */ 
    226                 dev_warn(&pdev->dev, "Unknown Neo1973 Revision 0x%x, " 
     264                dev_warn(&pdev->dev, "Unknown Freerunner Revision 0x%x, " 
    227265                         "some PM features not available!!!\n", 
    228266                         system_rev); 
    229267                break; 
    230268        } 
     269 
     270        gta02_gsm.con = find_s3c24xx_console(); 
     271        if (!gta02_gsm.con) 
     272                dev_warn(&pdev->dev, 
     273                         "cannot find S3C24xx console driver\n"); 
    231274 
    232275        /* note that download initially disabled, and enforce that */ 
Note: See TracChangeset for help on using the changeset viewer.