Lines Matching refs:sharpsl_pm

70 struct sharpsl_pm_status sharpsl_pm;  variable
189 int i = sharpsl_pm.machinfo->bat_levels - 1; in get_percentage()
190 …int bl_status = sharpsl_pm.machinfo->backlight_get_status ? sharpsl_pm.machinfo->backlight_get_sta… in get_percentage()
193 if (sharpsl_pm.charge_mode == CHRG_ON) in get_percentage()
194 …thresh = bl_status ? sharpsl_pm.machinfo->bat_levels_acin_bl : sharpsl_pm.machinfo->bat_levels_aci… in get_percentage()
196 …thresh = bl_status ? sharpsl_pm.machinfo->bat_levels_noac_bl : sharpsl_pm.machinfo->bat_levels_noa… in get_percentage()
208 if (sharpsl_pm.charge_mode == CHRG_ON) { in get_apm_status()
209 high_thresh = sharpsl_pm.machinfo->status_high_acin; in get_apm_status()
210 low_thresh = sharpsl_pm.machinfo->status_low_acin; in get_apm_status()
212 high_thresh = sharpsl_pm.machinfo->status_high_noac; in get_apm_status()
213 low_thresh = sharpsl_pm.machinfo->status_low_noac; in get_apm_status()
234 if (!sharpsl_pm.machinfo) in sharpsl_battery_thread()
237sharpsl_pm.battstat.ac_status = (sharpsl_pm.machinfo->read_devdata(SHARPSL_STATUS_ACIN) ? APM_AC_O… in sharpsl_battery_thread()
240 if (!sharpsl_pm.machinfo->batfull_irq && (sharpsl_pm.charge_mode == CHRG_ON) in sharpsl_battery_thread()
241 && time_after(jiffies, sharpsl_pm.charge_start_time + SHARPSL_CHARGE_ON_TIME_INTERVAL)) in sharpsl_battery_thread()
245 voltage = sharpsl_pm.machinfo->read_devdata(SHARPSL_BATT_VOLT); in sharpsl_battery_thread()
250 voltage = sharpsl_pm.machinfo->bat_levels_noac[0].voltage; in sharpsl_battery_thread()
251 dev_warn(sharpsl_pm.dev, "Warning: Cannot read main battery!\n"); in sharpsl_battery_thread()
260 if ((sharpsl_pm.battstat.ac_status == APM_AC_ONLINE) in sharpsl_battery_thread()
262 || percent <= sharpsl_pm.battstat.mainbat_percent) { in sharpsl_battery_thread()
263 sharpsl_pm.battstat.mainbat_voltage = voltage; in sharpsl_battery_thread()
264 sharpsl_pm.battstat.mainbat_status = apm_status; in sharpsl_battery_thread()
265 sharpsl_pm.battstat.mainbat_percent = percent; in sharpsl_battery_thread()
268 dev_dbg(sharpsl_pm.dev, "Battery: voltage: %d, status: %d, percentage: %d, time: %ld\n", voltage, in sharpsl_battery_thread()
269 sharpsl_pm.battstat.mainbat_status, sharpsl_pm.battstat.mainbat_percent, jiffies); in sharpsl_battery_thread()
272 if ((sharpsl_pm.battstat.ac_status != APM_AC_ONLINE) in sharpsl_battery_thread()
273 && (sharpsl_pm.battstat.mainbat_status == APM_BATTERY_STATUS_CRITICAL) in sharpsl_battery_thread()
274 && !(sharpsl_pm.flags & SHARPSL_APM_QUEUED)) { in sharpsl_battery_thread()
275 sharpsl_pm.flags |= SHARPSL_APM_QUEUED; in sharpsl_battery_thread()
276 dev_err(sharpsl_pm.dev, "Fatal Off\n"); in sharpsl_battery_thread()
286 dev_err(sharpsl_pm.dev, "Charging Error!\n"); in sharpsl_pm_led()
288 dev_dbg(sharpsl_pm.dev, "Charge LED On\n"); in sharpsl_pm_led()
291 dev_dbg(sharpsl_pm.dev, "Charge LED Off\n"); in sharpsl_pm_led()
298 dev_dbg(sharpsl_pm.dev, "Turning Charger On\n"); in sharpsl_charge_on()
300 sharpsl_pm.full_count = 0; in sharpsl_charge_on()
301 sharpsl_pm.charge_mode = CHRG_ON; in sharpsl_charge_on()
308 dev_dbg(sharpsl_pm.dev, "Turning Charger Off\n"); in sharpsl_charge_off()
310 sharpsl_pm.machinfo->charge(0); in sharpsl_charge_off()
312 sharpsl_pm.charge_mode = CHRG_OFF; in sharpsl_charge_off()
320 sharpsl_pm.machinfo->charge(0); in sharpsl_charge_error()
321 sharpsl_pm.charge_mode = CHRG_ERROR; in sharpsl_charge_error()
326 dev_dbg(sharpsl_pm.dev, "Toggling Charger at time: %lx\n", jiffies); in sharpsl_charge_toggle()
328 if (!sharpsl_pm.machinfo->read_devdata(SHARPSL_STATUS_ACIN)) { in sharpsl_charge_toggle()
337 sharpsl_pm.machinfo->charge(0); in sharpsl_charge_toggle()
339 sharpsl_pm.machinfo->charge(1); in sharpsl_charge_toggle()
341 sharpsl_pm.charge_start_time = jiffies; in sharpsl_charge_toggle()
346 int acin = sharpsl_pm.machinfo->read_devdata(SHARPSL_STATUS_ACIN); in sharpsl_ac_timer()
348 dev_dbg(sharpsl_pm.dev, "AC Status: %d\n", acin); in sharpsl_ac_timer()
351 if (acin && (sharpsl_pm.charge_mode != CHRG_ON)) in sharpsl_ac_timer()
353 else if (sharpsl_pm.charge_mode == CHRG_ON) in sharpsl_ac_timer()
364 mod_timer(&sharpsl_pm.ac_timer, jiffies + msecs_to_jiffies(250)); in sharpsl_ac_isr()
371 dev_dbg(sharpsl_pm.dev, "Charge Full at time: %lx\n", jiffies); in sharpsl_chrg_full_timer()
373 sharpsl_pm.full_count++; in sharpsl_chrg_full_timer()
375 if (!sharpsl_pm.machinfo->read_devdata(SHARPSL_STATUS_ACIN)) { in sharpsl_chrg_full_timer()
376 dev_dbg(sharpsl_pm.dev, "Charge Full: AC removed - stop charging!\n"); in sharpsl_chrg_full_timer()
377 if (sharpsl_pm.charge_mode == CHRG_ON) in sharpsl_chrg_full_timer()
379 } else if (sharpsl_pm.full_count < 2) { in sharpsl_chrg_full_timer()
380 dev_dbg(sharpsl_pm.dev, "Charge Full: Count too low\n"); in sharpsl_chrg_full_timer()
382 } else if (time_after(jiffies, sharpsl_pm.charge_start_time + SHARPSL_CHARGE_FINISH_TIME)) { in sharpsl_chrg_full_timer()
383 dev_dbg(sharpsl_pm.dev, "Charge Full: Interrupt generated too slowly - retry.\n"); in sharpsl_chrg_full_timer()
387 sharpsl_pm.charge_mode = CHRG_DONE; in sharpsl_chrg_full_timer()
388 dev_dbg(sharpsl_pm.dev, "Charge Full: Charging Finished\n"); in sharpsl_chrg_full_timer()
397 if (sharpsl_pm.flags & SHARPSL_SUSPENDED) in sharpsl_chrg_full_isr()
401 mod_timer(&sharpsl_pm.chrg_full_timer, jiffies + msecs_to_jiffies(500)); in sharpsl_chrg_full_isr()
410 if (!sharpsl_pm.machinfo->read_devdata(SHARPSL_STATUS_LOCK)) { in sharpsl_fatal_isr()
411 dev_err(sharpsl_pm.dev, "Battery now Unlocked! Suspending.\n"); in sharpsl_fatal_isr()
415 if (!sharpsl_pm.machinfo->read_devdata(SHARPSL_STATUS_FATAL)) { in sharpsl_fatal_isr()
416 dev_err(sharpsl_pm.dev, "Fatal Batt Error! Suspending.\n"); in sharpsl_fatal_isr()
420 if (!(sharpsl_pm.flags & SHARPSL_APM_QUEUED) && is_fatal) { in sharpsl_fatal_isr()
421 sharpsl_pm.flags |= SHARPSL_APM_QUEUED; in sharpsl_fatal_isr()
444 if (sharpsl_pm.battstat.mainbat_status != APM_BATTERY_STATUS_HIGH) { in sharpsl_average_value()
494 …dev_dbg(sharpsl_pm.dev, "Average: %d from values: %d, %d, %d, %d, %d\n", sum/3, val[0], val[1], va… in get_select_val()
506 sharpsl_pm.machinfo->measure_temp(1); in sharpsl_check_battery_temp()
508 buff[i] = sharpsl_pm.machinfo->read_devdata(SHARPSL_BATT_TEMP); in sharpsl_check_battery_temp()
509 sharpsl_pm.machinfo->measure_temp(0); in sharpsl_check_battery_temp()
514 dev_dbg(sharpsl_pm.dev, "Temperature: %d\n", val); in sharpsl_check_battery_temp()
515 if (val > sharpsl_pm.machinfo->charge_on_temp) { in sharpsl_check_battery_temp()
529 sharpsl_pm.machinfo->charge(0); in sharpsl_check_battery_voltage()
530 sharpsl_pm.machinfo->discharge(1); in sharpsl_check_battery_voltage()
533 if (sharpsl_pm.machinfo->discharge1) in sharpsl_check_battery_voltage()
534 sharpsl_pm.machinfo->discharge1(1); in sharpsl_check_battery_voltage()
538 buff[i] = sharpsl_pm.machinfo->read_devdata(SHARPSL_BATT_VOLT); in sharpsl_check_battery_voltage()
542 if (sharpsl_pm.machinfo->discharge1) in sharpsl_check_battery_voltage()
543 sharpsl_pm.machinfo->discharge1(0); in sharpsl_check_battery_voltage()
545 sharpsl_pm.machinfo->discharge(0); in sharpsl_check_battery_voltage()
548 dev_dbg(sharpsl_pm.dev, "Battery Voltage: %d\n", val); in sharpsl_check_battery_voltage()
550 if (val < sharpsl_pm.machinfo->charge_on_volt) in sharpsl_check_battery_voltage()
562 buff[i] = sharpsl_pm.machinfo->read_devdata(SHARPSL_ACIN_VOLT); in sharpsl_ac_check()
567 dev_dbg(sharpsl_pm.dev, "AC Voltage: %d\n", temp); in sharpsl_ac_check()
569 …if ((temp > sharpsl_pm.machinfo->charge_acin_high) || (temp < sharpsl_pm.machinfo->charge_acin_low… in sharpsl_ac_check()
570 dev_err(sharpsl_pm.dev, "Error: AC check failed: voltage %d.\n", temp); in sharpsl_ac_check()
580 sharpsl_pm.flags |= SHARPSL_SUSPENDED; in sharpsl_pm_suspend()
584 if (sharpsl_pm.charge_mode == CHRG_ON) in sharpsl_pm_suspend()
585 sharpsl_pm.flags |= SHARPSL_DO_OFFLINE_CHRG; in sharpsl_pm_suspend()
587 sharpsl_pm.flags &= ~SHARPSL_DO_OFFLINE_CHRG; in sharpsl_pm_suspend()
597 sharpsl_pm.flags &= ~SHARPSL_APM_QUEUED; in sharpsl_pm_resume()
598 sharpsl_pm.flags &= ~SHARPSL_SUSPENDED; in sharpsl_pm_resume()
605 dev_dbg(sharpsl_pm.dev, "Time is: %08x\n", RCNR); in corgi_goto_sleep()
607 …dev_dbg(sharpsl_pm.dev, "Offline Charge Activate = %d\n", sharpsl_pm.flags & SHARPSL_DO_OFFLINE_CH… in corgi_goto_sleep()
610 …if ((sharpsl_pm.flags & SHARPSL_DO_OFFLINE_CHRG) && (sharpsl_pm.machinfo->read_devdata(SHARPSL_STA… in corgi_goto_sleep()
611 dev_dbg(sharpsl_pm.dev, "Activating Offline Charger...\n"); in corgi_goto_sleep()
612 sharpsl_pm.charge_mode = CHRG_OFF; in corgi_goto_sleep()
613 sharpsl_pm.flags &= ~SHARPSL_DO_OFFLINE_CHRG; in corgi_goto_sleep()
617 sharpsl_pm.machinfo->presuspend(); in corgi_goto_sleep()
621 sharpsl_pm.flags &= ~SHARPSL_ALARM_ACTIVE; in corgi_goto_sleep()
622 …if ((sharpsl_pm.charge_mode == CHRG_ON) && ((alarm_enable && ((alarm_time - RCNR) > (SHARPSL_BATCH… in corgi_goto_sleep()
625 dev_dbg(sharpsl_pm.dev, "Charging alarm at: %08x\n", RTAR); in corgi_goto_sleep()
626 sharpsl_pm.flags |= SHARPSL_ALARM_ACTIVE; in corgi_goto_sleep()
630 dev_dbg(sharpsl_pm.dev, "User alarm at: %08x\n", RTAR); in corgi_goto_sleep()
632 dev_dbg(sharpsl_pm.dev, "No alarms set.\n"); in corgi_goto_sleep()
637 sharpsl_pm.machinfo->postsuspend(); in corgi_goto_sleep()
639 dev_dbg(sharpsl_pm.dev, "Corgi woken up from suspend: %08x\n", PEDR); in corgi_goto_sleep()
644 …if (!sharpsl_pm.machinfo->should_wakeup(!(sharpsl_pm.flags & SHARPSL_ALARM_ACTIVE) && alarm_enable… in corgi_enter_suspend()
645 if (!(sharpsl_pm.flags & SHARPSL_ALARM_ACTIVE)) { in corgi_enter_suspend()
646 dev_dbg(sharpsl_pm.dev, "No user triggered wakeup events and not charging. Strange. Suspend.\n"); in corgi_enter_suspend()
651 dev_dbg(sharpsl_pm.dev, "Charging. Suspend...\n"); in corgi_enter_suspend()
655 dev_dbg(sharpsl_pm.dev, "User triggered wakeup in offline charger.\n"); in corgi_enter_suspend()
658 if ((!sharpsl_pm.machinfo->read_devdata(SHARPSL_STATUS_LOCK)) || in corgi_enter_suspend()
659 (!sharpsl_pm.machinfo->read_devdata(SHARPSL_STATUS_FATAL))) { in corgi_enter_suspend()
660 dev_err(sharpsl_pm.dev, "Fatal condition. Suspend.\n"); in corgi_enter_suspend()
673 dev_dbg(sharpsl_pm.dev, "SharpSL suspending for first time.\n"); in corgi_pxa_pm_enter()
680 if (sharpsl_pm.machinfo->earlyresume) in corgi_pxa_pm_enter()
681 sharpsl_pm.machinfo->earlyresume(); in corgi_pxa_pm_enter()
683 dev_dbg(sharpsl_pm.dev, "SharpSL resuming...\n"); in corgi_pxa_pm_enter()
690 dev_err(sharpsl_pm.dev, "Offline Charger: Error occurred.\n"); in sharpsl_off_charge_error()
691 sharpsl_pm.machinfo->charge(0); in sharpsl_off_charge_error()
693 sharpsl_pm.charge_mode = CHRG_ERROR; in sharpsl_off_charge_error()
706 dev_dbg(sharpsl_pm.dev, "Charge Mode: %d\n", sharpsl_pm.charge_mode); in sharpsl_off_charge_battery()
708 if (sharpsl_pm.charge_mode == CHRG_OFF) { in sharpsl_off_charge_battery()
709 dev_dbg(sharpsl_pm.dev, "Offline Charger: Step 1\n"); in sharpsl_off_charge_battery()
717 sharpsl_pm.machinfo->charge(0); in sharpsl_off_charge_battery()
719 sharpsl_pm.machinfo->charge(1); in sharpsl_off_charge_battery()
721 sharpsl_pm.charge_mode = CHRG_ON; in sharpsl_off_charge_battery()
722 sharpsl_pm.full_count = 0; in sharpsl_off_charge_battery()
725 } else if (sharpsl_pm.charge_mode != CHRG_ON) { in sharpsl_off_charge_battery()
729 if (sharpsl_pm.full_count == 0) { in sharpsl_off_charge_battery()
732 dev_dbg(sharpsl_pm.dev, "Offline Charger: Step 2\n"); in sharpsl_off_charge_battery()
737 sharpsl_pm.machinfo->charge(0); in sharpsl_off_charge_battery()
739 sharpsl_pm.machinfo->charge(1); in sharpsl_off_charge_battery()
740 sharpsl_pm.charge_mode = CHRG_ON; in sharpsl_off_charge_battery()
747 if (sharpsl_pm.machinfo->charger_wakeup() != 0) in sharpsl_off_charge_battery()
752 if (sharpsl_pm.machinfo->read_devdata(SHARPSL_STATUS_CHRGFULL)) { in sharpsl_off_charge_battery()
753 dev_dbg(sharpsl_pm.dev, "Offline Charger: Charge full occurred. Retrying to check\n"); in sharpsl_off_charge_battery()
754 sharpsl_pm.full_count++; in sharpsl_off_charge_battery()
755 sharpsl_pm.machinfo->charge(0); in sharpsl_off_charge_battery()
757 sharpsl_pm.machinfo->charge(1); in sharpsl_off_charge_battery()
763 dev_dbg(sharpsl_pm.dev, "Offline Charger: Step 3\n"); in sharpsl_off_charge_battery()
770 if (sharpsl_pm.machinfo->charger_wakeup()) in sharpsl_off_charge_battery()
774 if (sharpsl_pm.full_count > SHARPSL_CHARGE_RETRY_CNT) { in sharpsl_off_charge_battery()
775 dev_dbg(sharpsl_pm.dev, "Offline Charger: Not charged sufficiently. Retrying.\n"); in sharpsl_off_charge_battery()
776 sharpsl_pm.full_count = 0; in sharpsl_off_charge_battery()
778 sharpsl_pm.full_count++; in sharpsl_off_charge_battery()
781 if (sharpsl_pm.machinfo->read_devdata(SHARPSL_STATUS_CHRGFULL)) { in sharpsl_off_charge_battery()
782 dev_dbg(sharpsl_pm.dev, "Offline Charger: Charging complete.\n"); in sharpsl_off_charge_battery()
784 sharpsl_pm.machinfo->charge(0); in sharpsl_off_charge_battery()
785 sharpsl_pm.charge_mode = CHRG_DONE; in sharpsl_off_charge_battery()
797 return sprintf(buf, "%d\n", sharpsl_pm.battstat.mainbat_percent); in battery_percentage_show()
802 return sprintf(buf, "%d\n", sharpsl_pm.battstat.mainbat_voltage); in battery_voltage_show()
812 info->ac_line_status = sharpsl_pm.battstat.ac_status; in sharpsl_apm_get_power_status()
814 if (sharpsl_pm.charge_mode == CHRG_ON) in sharpsl_apm_get_power_status()
817 info->battery_status = sharpsl_pm.battstat.mainbat_status; in sharpsl_apm_get_power_status()
820 info->battery_life = sharpsl_pm.battstat.mainbat_percent; in sharpsl_apm_get_power_status()
839 sharpsl_pm.dev = &pdev->dev; in sharpsl_pm_probe()
840 sharpsl_pm.machinfo = pdev->dev.platform_data; in sharpsl_pm_probe()
841 sharpsl_pm.charge_mode = CHRG_OFF; in sharpsl_pm_probe()
842 sharpsl_pm.flags = 0; in sharpsl_pm_probe()
844 init_timer(&sharpsl_pm.ac_timer); in sharpsl_pm_probe()
845 sharpsl_pm.ac_timer.function = sharpsl_ac_timer; in sharpsl_pm_probe()
847 init_timer(&sharpsl_pm.chrg_full_timer); in sharpsl_pm_probe()
848 sharpsl_pm.chrg_full_timer.function = sharpsl_chrg_full_timer; in sharpsl_pm_probe()
852 sharpsl_pm.machinfo->init(); in sharpsl_pm_probe()
854 gpio_request(sharpsl_pm.machinfo->gpio_acin, "AC IN"); in sharpsl_pm_probe()
855 gpio_direction_input(sharpsl_pm.machinfo->gpio_acin); in sharpsl_pm_probe()
856 gpio_request(sharpsl_pm.machinfo->gpio_batfull, "Battery Full"); in sharpsl_pm_probe()
857 gpio_direction_input(sharpsl_pm.machinfo->gpio_batfull); in sharpsl_pm_probe()
858 gpio_request(sharpsl_pm.machinfo->gpio_batlock, "Battery Lock"); in sharpsl_pm_probe()
859 gpio_direction_input(sharpsl_pm.machinfo->gpio_batlock); in sharpsl_pm_probe()
862 irq = gpio_to_irq(sharpsl_pm.machinfo->gpio_acin); in sharpsl_pm_probe()
864 dev_err(sharpsl_pm.dev, "Could not get irq %d.\n", irq); in sharpsl_pm_probe()
867 irq = gpio_to_irq(sharpsl_pm.machinfo->gpio_batlock); in sharpsl_pm_probe()
869 dev_err(sharpsl_pm.dev, "Could not get irq %d.\n", irq); in sharpsl_pm_probe()
872 if (sharpsl_pm.machinfo->gpio_fatal) { in sharpsl_pm_probe()
873 irq = gpio_to_irq(sharpsl_pm.machinfo->gpio_fatal); in sharpsl_pm_probe()
875 dev_err(sharpsl_pm.dev, "Could not get irq %d.\n", irq); in sharpsl_pm_probe()
879 if (sharpsl_pm.machinfo->batfull_irq) { in sharpsl_pm_probe()
881 irq = gpio_to_irq(sharpsl_pm.machinfo->gpio_batfull); in sharpsl_pm_probe()
883 dev_err(sharpsl_pm.dev, "Could not get irq %d.\n", irq); in sharpsl_pm_probe()
898 mod_timer(&sharpsl_pm.ac_timer, jiffies + msecs_to_jiffies(250)); in sharpsl_pm_probe()
912 free_irq(gpio_to_irq(sharpsl_pm.machinfo->gpio_acin), sharpsl_ac_isr); in sharpsl_pm_remove()
913 free_irq(gpio_to_irq(sharpsl_pm.machinfo->gpio_batlock), sharpsl_fatal_isr); in sharpsl_pm_remove()
915 if (sharpsl_pm.machinfo->gpio_fatal) in sharpsl_pm_remove()
916 free_irq(gpio_to_irq(sharpsl_pm.machinfo->gpio_fatal), sharpsl_fatal_isr); in sharpsl_pm_remove()
918 if (sharpsl_pm.machinfo->batfull_irq) in sharpsl_pm_remove()
919 free_irq(gpio_to_irq(sharpsl_pm.machinfo->gpio_batfull), sharpsl_chrg_full_isr); in sharpsl_pm_remove()
921 gpio_free(sharpsl_pm.machinfo->gpio_batlock); in sharpsl_pm_remove()
922 gpio_free(sharpsl_pm.machinfo->gpio_batfull); in sharpsl_pm_remove()
923 gpio_free(sharpsl_pm.machinfo->gpio_acin); in sharpsl_pm_remove()
925 if (sharpsl_pm.machinfo->exit) in sharpsl_pm_remove()
926 sharpsl_pm.machinfo->exit(); in sharpsl_pm_remove()
928 del_timer_sync(&sharpsl_pm.chrg_full_timer); in sharpsl_pm_remove()
929 del_timer_sync(&sharpsl_pm.ac_timer); in sharpsl_pm_remove()