static int fan_proc_show(struct seq_file *m, void *v) { struct toshiba_acpi_dev *dev = m->private; int ret; u32 value; ret = get_fan_status(dev, &value); if (!ret) { seq_printf(m, "running: %d\n", (value > 0)); seq_printf(m, "force_on: %d\n", dev->force_fan); } return ret; }
void get_power_status(pm_status *power_status) { /* Is this an ACPI system? */ if (pm_type == PM_ACPI) { static ACPIinfo acpiinfo; static ACADstate acadstate; static ACPIstate acpistate; read_acpi_info(&acpiinfo, Battery - 1); read_acpi_state(&acpistate, &acpiinfo, Battery - 1); read_acad_state(&acadstate); /* Check if we are on ac power */ ac_on_line = power_status->ac_on_line = acadstate.state; /* Check to see if we are charging. */ if (acpistate.state == CHARGING) power_status->battery_charging=1; else power_status->battery_charging=0; /* Check battery time and percentage */ power_status->battery_time = acpistate.rtime; power_status->battery_percentage = acpistate.percentage; if (power_status->battery_percentage > 100) power_status->battery_percentage = 100; battery_percentage = power_status->battery_percentage; /* Check if battery is plugged in */ battery_present = power_status->battery_present = acpistate.present; /* Get temperature and fan status */ power_status->fan_status=get_fan_status(); get_temperature(&(power_status->temperature), &(power_status->temp_is_celsius)); if (fast_charge_mode && (power_status->battery_percentage == 100)) fast_battery_charge(0); /* Let's see wether we failed to get battery time */ if (battery_present && (battery_percentage < 100) && (power_status->battery_time <= 0)) { /* OK, we failed, we calculate the value ourselves */ power_status->battery_time = calculate_battery_time(battery_percentage, ac_on_line); } return; } /* Is this an APM system? */ if (pm_type == PM_APM) { struct_apm_data apm_data; if (!apm_read(&apm_data)) { fprintf(stderr, "Could not read APM info!\n"); return; } ac_on_line = power_status->ac_on_line = apm_data.ac_line_status; if ( apm_data.battery_percentage == -1) { battery_present = power_status->battery_present = 0; battery_percentage = power_status->battery_percentage = 0; } else { battery_present = power_status->battery_present = 1; power_status->battery_percentage = apm_data.battery_percentage; if (power_status->battery_percentage > 100) power_status->battery_percentage = 100; battery_percentage = power_status->battery_percentage; } if ( (int)(apm_data.battery_status) == 3) power_status->battery_charging=1; else power_status->battery_charging=0; power_status->battery_time = (apm_data.using_minutes) ? apm_data.battery_time : apm_data.battery_time / 60; power_status->fan_status=get_fan_status(); get_temperature(&(power_status->temperature), &(power_status->temp_is_celsius)); if (fast_charge_mode && (power_status->battery_percentage == 100)) fast_battery_charge(0); return; } }
static int __devinit toshiba_acpi_add(struct acpi_device *acpi_dev) { struct toshiba_acpi_dev *dev; const char *hci_method; u32 dummy; bool bt_present; int ret = 0; struct backlight_properties props; if (toshiba_acpi) return -EBUSY; pr_info("Toshiba Laptop ACPI Extras version %s\n", TOSHIBA_ACPI_VERSION); hci_method = find_hci_method(acpi_dev->handle); if (!hci_method) { pr_err("HCI interface not found\n"); return -ENODEV; } dev = kzalloc(sizeof(*dev), GFP_KERNEL); if (!dev) return -ENOMEM; dev->acpi_dev = acpi_dev; dev->method_hci = hci_method; acpi_dev->driver_data = dev; if (toshiba_acpi_setup_keyboard(dev)) pr_info("Unable to activate hotkeys\n"); mutex_init(&dev->mutex); props.type = BACKLIGHT_PLATFORM; props.max_brightness = HCI_LCD_BRIGHTNESS_LEVELS - 1; dev->backlight_dev = backlight_device_register("toshiba", &acpi_dev->dev, dev, &toshiba_backlight_data, &props); if (IS_ERR(dev->backlight_dev)) { ret = PTR_ERR(dev->backlight_dev); pr_err("Could not register toshiba backlight device\n"); dev->backlight_dev = NULL; goto error; } dev->backlight_dev->props.brightness = get_lcd(dev->backlight_dev); /* */ if (hci_get_bt_present(dev, &bt_present) == HCI_SUCCESS && bt_present) { dev->bt_rfk = rfkill_alloc("Toshiba Bluetooth", &acpi_dev->dev, RFKILL_TYPE_BLUETOOTH, &toshiba_rfk_ops, dev); if (!dev->bt_rfk) { pr_err("unable to allocate rfkill device\n"); ret = -ENOMEM; goto error; } ret = rfkill_register(dev->bt_rfk); if (ret) { pr_err("unable to register rfkill device\n"); rfkill_destroy(dev->bt_rfk); goto error; } } if (toshiba_illumination_available(dev)) { dev->led_dev.name = "toshiba::illumination"; dev->led_dev.max_brightness = 1; dev->led_dev.brightness_set = toshiba_illumination_set; dev->led_dev.brightness_get = toshiba_illumination_get; if (!led_classdev_register(&acpi_dev->dev, &dev->led_dev)) dev->illumination_supported = 1; } /* */ ret = get_video_status(dev, &dummy); dev->video_supported = !ret; ret = get_fan_status(dev, &dummy); dev->fan_supported = !ret; create_toshiba_proc_entries(dev); toshiba_acpi = dev; return 0; error: toshiba_acpi_remove(acpi_dev, 0); return ret; }
static int toshiba_acpi_add(struct acpi_device *acpi_dev) { struct toshiba_acpi_dev *dev; const char *hci_method; u32 dummy; bool bt_present; int ret = 0; if (toshiba_acpi) return -EBUSY; pr_info("Toshiba Laptop ACPI Extras version %s\n", TOSHIBA_ACPI_VERSION); hci_method = find_hci_method(acpi_dev->handle); if (!hci_method) { pr_err("HCI interface not found\n"); return -ENODEV; } dev = kzalloc(sizeof(*dev), GFP_KERNEL); if (!dev) return -ENOMEM; dev->acpi_dev = acpi_dev; dev->method_hci = hci_method; acpi_dev->driver_data = dev; if (toshiba_acpi_setup_keyboard(dev)) pr_info("Unable to activate hotkeys\n"); mutex_init(&dev->mutex); ret = toshiba_acpi_setup_backlight(dev); if (ret) goto error; /* Register rfkill switch for Bluetooth */ if (hci_get_bt_present(dev, &bt_present) == HCI_SUCCESS && bt_present) { dev->bt_rfk = rfkill_alloc("Toshiba Bluetooth", &acpi_dev->dev, RFKILL_TYPE_BLUETOOTH, &toshiba_rfk_ops, dev); if (!dev->bt_rfk) { pr_err("unable to allocate rfkill device\n"); ret = -ENOMEM; goto error; } ret = rfkill_register(dev->bt_rfk); if (ret) { pr_err("unable to register rfkill device\n"); rfkill_destroy(dev->bt_rfk); goto error; } } if (toshiba_illumination_available(dev)) { dev->led_dev.name = "toshiba::illumination"; dev->led_dev.max_brightness = 1; dev->led_dev.brightness_set = toshiba_illumination_set; dev->led_dev.brightness_get = toshiba_illumination_get; if (!led_classdev_register(&acpi_dev->dev, &dev->led_dev)) dev->illumination_supported = 1; } /* Determine whether or not BIOS supports fan and video interfaces */ ret = get_video_status(dev, &dummy); dev->video_supported = !ret; ret = get_fan_status(dev, &dummy); dev->fan_supported = !ret; create_toshiba_proc_entries(dev); toshiba_acpi = dev; return 0; error: toshiba_acpi_remove(acpi_dev); return ret; }