Changeset 19504


Ignore:
Timestamp:
2010-02-03T14:16:23+01:00 (7 years ago)
Author:
lars
Message:

[xburst] Seperate charger logic from battery driver

Location:
trunk/target/linux/xburst
Files:
3 added
4 edited

Legend:

Unmodified
Added
Removed
  • trunk/target/linux/xburst/config-2.6.32

    r19309 r19504  
    2525# CONFIG_CAVIUM_OCTEON_SIMULATOR is not set 
    2626CONFIG_CFG80211_DEFAULT_PS_VALUE=0 
     27CONFIG_CHARGER_GPIO=y 
    2728CONFIG_CONSOLE_TRANSLATIONS=y 
    2829# CONFIG_CPU_BIG_ENDIAN is not set 
  • trunk/target/linux/xburst/files-2.6.32/arch/mips/jz4740/board-qi_lb60.c

    r19098 r19504  
    2929#include <linux/power_supply.h> 
    3030#include <linux/power/jz4740-battery.h> 
     31#include <linux/power/gpio-charger.h> 
    3132#include <linux/mmc/jz4740_mmc.h> 
    3233 
     
    287288/* Battery */ 
    288289static struct jz_batt_info qi_lb60_battery_pdata = { 
    289         .dc_dect_gpio   = GPIO_DC_DETE_N, 
    290         .usb_dect_gpio  = GPIO_USB_DETE, 
    291290        .charg_stat_gpio  = GPIO_CHARG_STAT_N, 
    292291 
     
    294293        .max_voltag     = 4200000, 
    295294        .batt_tech      = POWER_SUPPLY_TECHNOLOGY_LIPO, 
     295}; 
     296 
     297static char *qi_lb60_batteries[] = { 
     298        "battery", 
     299}; 
     300 
     301static struct gpio_charger_platform_data qi_lb60_charger_pdata = { 
     302        .name = "USB", 
     303        .type = POWER_SUPPLY_TYPE_USB, 
     304        .gpio = GPIO_USB_DETE, 
     305        .gpio_active_low = 1, 
     306        .batteries = qi_lb60_batteries, 
     307        .num_batteries = ARRAY_SIZE(qi_lb60_batteries), 
     308}; 
     309 
     310static struct platform_device qi_lb60_charger_device = { 
     311        .name = "gpio-charger", 
     312        .dev = { 
     313                .platform_data = &qi_lb60_charger_pdata, 
     314        }, 
    296315}; 
    297316 
     
    341360        &jz4740_battery_device, 
    342361        &qi_lb60_gpio_keys, 
     362        &qi_lb60_charger_device, 
    343363}; 
    344364 
  • trunk/target/linux/xburst/files-2.6.32/drivers/power/jz4740-battery.c

    r19098 r19504  
    2525 
    2626struct jz_battery_info { 
    27         struct power_supply usb; 
    2827        struct power_supply bat; 
    29         struct power_supply ac; 
    3028        int bat_status; 
    3129        struct jz_batt_info *pdata; 
     
    3634 
    3735#define ps_to_jz_battery(x) container_of((x), struct jz_battery_info, bat); 
    38  
    39 /********************************************************************* 
    40  *              Power 
    41  *********************************************************************/ 
    42  
    43  
    44 static int jz_get_power_prop(struct jz_battery_info *bat_info, 
    45                              struct power_supply *psy, 
    46                              enum power_supply_property psp, 
    47                              union power_supply_propval *val) 
    48 { 
    49         int gpio; 
    50          
    51         if (bat_info == 0 || bat_info->pdata == 0) 
    52                 return -EINVAL; 
    53         gpio = (psy->type == POWER_SUPPLY_TYPE_MAINS) ? 
    54                 bat_info->pdata->dc_dect_gpio : 
    55                 bat_info->pdata->usb_dect_gpio; 
    56         if (!gpio_is_valid(gpio)) 
    57                 return -EINVAL; 
    58         switch (psp) { 
    59         case POWER_SUPPLY_PROP_ONLINE: 
    60                 val->intval = !gpio_get_value(gpio); 
    61                 break; 
    62         default: 
    63                 return -EINVAL; 
    64         } 
    65  
    66         return 0; 
    67 } 
    68  
    69 static int jz_usb_get_power_prop(struct power_supply *psy, 
    70                                  enum power_supply_property psp, 
    71                                  union power_supply_propval *val) 
    72 { 
    73         struct jz_battery_info *bat_info = container_of(psy, struct jz_battery_info, usb); 
    74         return jz_get_power_prop(bat_info, psy, psp, val); 
    75 } 
    76  
    77 static int jz_ac_get_power_prop(struct power_supply *psy, 
    78                                  enum power_supply_property psp, 
    79                                  union power_supply_propval *val) 
    80 { 
    81         struct jz_battery_info *bat_info = container_of(psy, struct jz_battery_info, ac); 
    82         return jz_get_power_prop(bat_info, psy, psp, val); 
    83 } 
    84  
    85  
    86 static enum power_supply_property jz_power_props[] = { 
    87         POWER_SUPPLY_PROP_ONLINE, 
    88 }; 
    89  
    90 static struct power_supply jz_ac = { 
    91         .name = "ac", 
    92         .type = POWER_SUPPLY_TYPE_MAINS, 
    93         .properties = jz_power_props, 
    94         .num_properties = ARRAY_SIZE(jz_power_props), 
    95         .get_property = jz_ac_get_power_prop, 
    96 }; 
    97  
    98 static struct power_supply jz_usb = { 
    99         .name = "usb", 
    100         .type = POWER_SUPPLY_TYPE_USB, 
    101         .properties = jz_power_props, 
    102         .num_properties = ARRAY_SIZE(jz_power_props), 
    103         .get_property = jz_usb_get_power_prop, 
    104 }; 
    105  
    10636 
    10737/********************************************************************* 
     
    308238        int ret = 0; 
    309239        struct jz_battery_info *bat_info; 
    310          
     240 
     241        if (!pdev->dev.platform_data) { 
     242                dev_err(&pdev->dev, "Please set battery info\n"); 
     243                return -EINVAL; 
     244        } 
     245 
    311246        bat_info = kzalloc(sizeof(struct jz_battery_info), GFP_KERNEL); 
    312247 
     
    315250        } 
    316251 
    317         if (!pdev->dev.platform_data) { 
    318                 dev_err(&pdev->dev, "Please set battery info\n"); 
    319                 ret = -EINVAL; 
    320                 goto err_platform_data; 
    321         } 
    322252        platform_set_drvdata(pdev, bat_info); 
    323253        bat_info->pdata = pdev->dev.platform_data; 
    324254        bat_info->bat = bat_ps; 
    325         bat_info->usb = jz_usb; 
    326         bat_info->ac =  jz_ac; 
    327255        mutex_init(&bat_info->work_lock); 
    328256        INIT_DELAYED_WORK(&bat_info->bat_work, jz_bat_work); 
    329  
    330         if (gpio_is_valid(bat_info->pdata->dc_dect_gpio)) { 
    331                 ret = gpio_request(bat_info->pdata->dc_dect_gpio, "AC/DC DECT"); 
    332                 if (ret) { 
    333                         dev_err(&pdev->dev, "ac/dc dect gpio request failed.\n"); 
    334  
    335                         goto err_dc_gpio_request; 
    336                 } 
    337                 ret = gpio_direction_input(bat_info->pdata->dc_dect_gpio); 
    338                 if (ret) { 
    339                         dev_err(&pdev->dev, "ac/dc dect gpio direction failed.\n"); 
    340  
    341                         goto err_dc_gpio_direction; 
    342                 } 
    343         } 
    344  
    345         if (gpio_is_valid(bat_info->pdata->usb_dect_gpio)) { 
    346                 ret = gpio_request(bat_info->pdata->usb_dect_gpio, "USB DECT"); 
    347                 if (ret) { 
    348                         dev_err(&pdev->dev, "usb dect gpio request failed.\n"); 
    349  
    350                         goto err_usb_gpio_request; 
    351                 } 
    352                 ret = gpio_direction_input(bat_info->pdata->usb_dect_gpio); 
    353                 if (ret) { 
    354                         dev_err(&pdev->dev, "usb dect gpio set direction failed.\n"); 
    355                         goto err_usb_gpio_direction; 
    356                 } 
    357  
    358                 jz_gpio_disable_pullup(bat_info->pdata->usb_dect_gpio); 
    359                 /* TODO: Use generic gpio is better */ 
    360         } 
    361257 
    362258        if (gpio_is_valid(bat_info->pdata->charg_stat_gpio)) { 
     
    371267                        goto err_charg_gpio_direction; 
    372268                } 
    373         } 
    374          
    375         if (gpio_is_valid(bat_info->pdata->dc_dect_gpio)) { 
    376                 ret = power_supply_register(&pdev->dev, &bat_info->ac); 
    377                 if (ret) { 
    378                         dev_err(&pdev->dev, "power supply ac/dc register failed.\n"); 
    379                         goto err_power_register_ac; 
    380                 } 
    381         } 
    382  
    383         if (gpio_is_valid(bat_info->pdata->usb_dect_gpio)) { 
    384                 ret = power_supply_register(&pdev->dev, &bat_info->usb); 
    385                 if (ret) { 
    386                         dev_err(&pdev->dev, "power supply usb register failed.\n"); 
    387                         goto err_power_register_usb; 
    388                 } 
    389         } 
    390  
    391         if (gpio_is_valid(bat_info->pdata->charg_stat_gpio)) { 
     269 
    392270                ret = power_supply_register(&pdev->dev, &bat_info->bat); 
    393271                if (ret) { 
     
    406284 
    407285err_power_register_bat: 
    408         power_supply_unregister(&bat_info->usb); 
    409 err_power_register_usb: 
    410         power_supply_unregister(&bat_info->ac); 
    411 err_power_register_ac: 
    412286err_charg_gpio_direction: 
    413287        gpio_free(bat_info->pdata->charg_stat_gpio); 
    414288err_charg_gpio_request: 
    415 err_usb_gpio_direction: 
    416         gpio_free(bat_info->pdata->usb_dect_gpio); 
    417 err_usb_gpio_request: 
    418 err_dc_gpio_direction: 
    419         gpio_free(bat_info->pdata->dc_dect_gpio); 
    420 err_dc_gpio_request: 
    421 err_platform_data: 
    422289        kfree(bat_info); 
    423290        return ret; 
     
    427294{ 
    428295        struct jz_battery_info *bat_info = platform_get_drvdata(pdev); 
    429                  
     296 
    430297        if (bat_info->pdata) { 
    431                 if (gpio_is_valid(bat_info->pdata->dc_dect_gpio)) 
    432                         gpio_free(bat_info->pdata->dc_dect_gpio); 
    433                 if (gpio_is_valid(bat_info->pdata->usb_dect_gpio)) 
    434                         gpio_free(bat_info->pdata->usb_dect_gpio); 
    435298                if (gpio_is_valid(bat_info->pdata->charg_stat_gpio)) 
    436299                        gpio_free(bat_info->pdata->charg_stat_gpio); 
     
    438301 
    439302        power_supply_unregister(&bat_ps); 
    440         power_supply_unregister(&jz_ac); 
    441         power_supply_unregister(&jz_usb); 
    442303 
    443304        return 0; 
  • trunk/target/linux/xburst/files-2.6.32/include/linux/power/jz4740-battery.h

    r19098 r19504  
    1717 
    1818struct jz_batt_info { 
    19         int dc_dect_gpio;       /* GPIO port of DC charger detection */ 
    20         int usb_dect_gpio;      /* GPIO port of USB charger detection */ 
    2119        int charg_stat_gpio;    /* GPIO port of Charger state */ 
    2220 
Note: See TracChangeset for help on using the changeset viewer.