Lines Matching full:pcc
53 * add /proc/acpi/pcc/brightness interface for HAL access
160 #define ACPI_PCC_CLASS "pcc"
245 static int acpi_pcc_write_sset(struct pcc_acpi *pcc, int func, int val) in acpi_pcc_write_sset() argument
259 status = acpi_evaluate_object(pcc->handle, METHOD_HKEY_SSET, in acpi_pcc_write_sset()
280 static int acpi_pcc_retrieve_biosdata(struct pcc_acpi *pcc) in acpi_pcc_retrieve_biosdata() argument
287 status = acpi_evaluate_object(pcc->handle, METHOD_HKEY_SINF, NULL, in acpi_pcc_retrieve_biosdata()
301 if (pcc->num_sifr < hkey->package.count) { in acpi_pcc_retrieve_biosdata()
310 pcc->sinf[i] = element->integer.value; in acpi_pcc_retrieve_biosdata()
314 pcc->sinf[hkey->package.count] = -1; in acpi_pcc_retrieve_biosdata()
330 struct pcc_acpi *pcc = bl_get_data(bd); in bl_get() local
332 if (!acpi_pcc_retrieve_biosdata(pcc)) in bl_get()
335 return pcc->sinf[SINF_AC_CUR_BRIGHT]; in bl_get()
340 struct pcc_acpi *pcc = bl_get_data(bd); in bl_set_status() local
344 if (!acpi_pcc_retrieve_biosdata(pcc)) in bl_set_status()
347 if (bright < pcc->sinf[SINF_AC_MIN_BRIGHT]) in bl_set_status()
348 bright = pcc->sinf[SINF_AC_MIN_BRIGHT]; in bl_set_status()
350 if (bright < pcc->sinf[SINF_DC_MIN_BRIGHT]) in bl_set_status()
351 bright = pcc->sinf[SINF_DC_MIN_BRIGHT]; in bl_set_status()
353 if (bright < pcc->sinf[SINF_AC_MIN_BRIGHT] || in bl_set_status()
354 bright > pcc->sinf[SINF_AC_MAX_BRIGHT]) in bl_set_status()
357 rc = acpi_pcc_write_sset(pcc, SINF_AC_CUR_BRIGHT, bright); in bl_set_status()
361 return acpi_pcc_write_sset(pcc, SINF_DC_CUR_BRIGHT, bright); in bl_set_status()
468 struct pcc_acpi *pcc = acpi_driver_data(acpi); in numbatt_show() local
470 if (!acpi_pcc_retrieve_biosdata(pcc)) in numbatt_show()
473 return snprintf(buf, PAGE_SIZE, "%u\n", pcc->sinf[SINF_NUM_BATTERIES]); in numbatt_show()
480 struct pcc_acpi *pcc = acpi_driver_data(acpi); in lcdtype_show() local
482 if (!acpi_pcc_retrieve_biosdata(pcc)) in lcdtype_show()
485 return snprintf(buf, PAGE_SIZE, "%u\n", pcc->sinf[SINF_LCD_TYPE]); in lcdtype_show()
492 struct pcc_acpi *pcc = acpi_driver_data(acpi); in mute_show() local
494 if (!acpi_pcc_retrieve_biosdata(pcc)) in mute_show()
497 return snprintf(buf, PAGE_SIZE, "%u\n", pcc->sinf[SINF_MUTE]); in mute_show()
504 struct pcc_acpi *pcc = acpi_driver_data(acpi); in mute_store() local
511 acpi_pcc_write_sset(pcc, SINF_MUTE, val); in mute_store()
512 pcc->mute = val; in mute_store()
522 struct pcc_acpi *pcc = acpi_driver_data(acpi); in sticky_key_show() local
524 if (!acpi_pcc_retrieve_biosdata(pcc)) in sticky_key_show()
527 return snprintf(buf, PAGE_SIZE, "%u\n", pcc->sticky_key); in sticky_key_show()
534 struct pcc_acpi *pcc = acpi_driver_data(acpi); in sticky_key_store() local
541 acpi_pcc_write_sset(pcc, SINF_STICKY_KEY, val); in sticky_key_store()
542 pcc->sticky_key = val; in sticky_key_store()
552 struct pcc_acpi *pcc = acpi_driver_data(acpi); in eco_mode_show() local
555 if (!acpi_pcc_retrieve_biosdata(pcc)) in eco_mode_show()
558 switch (pcc->sinf[SINF_ECO_MODE]) { in eco_mode_show()
576 struct pcc_acpi *pcc = acpi_driver_data(acpi); in eco_mode_store() local
596 pcc->sinf[SINF_ECO_MODE] = 0; in eco_mode_store()
597 pcc->eco_mode = 0; in eco_mode_store()
601 pcc->sinf[SINF_ECO_MODE] = 1; in eco_mode_store()
602 pcc->eco_mode = 1; in eco_mode_store()
623 struct pcc_acpi *pcc = acpi_driver_data(acpi); in ac_brightness_show() local
625 if (!acpi_pcc_retrieve_biosdata(pcc)) in ac_brightness_show()
628 return snprintf(buf, PAGE_SIZE, "%u\n", pcc->sinf[SINF_AC_CUR_BRIGHT]); in ac_brightness_show()
635 struct pcc_acpi *pcc = acpi_driver_data(acpi); in ac_brightness_store() local
642 acpi_pcc_write_sset(pcc, SINF_AC_CUR_BRIGHT, val); in ac_brightness_store()
643 pcc->ac_brightness = val; in ac_brightness_store()
653 struct pcc_acpi *pcc = acpi_driver_data(acpi); in dc_brightness_show() local
655 if (!acpi_pcc_retrieve_biosdata(pcc)) in dc_brightness_show()
658 return snprintf(buf, PAGE_SIZE, "%u\n", pcc->sinf[SINF_DC_CUR_BRIGHT]); in dc_brightness_show()
665 struct pcc_acpi *pcc = acpi_driver_data(acpi); in dc_brightness_store() local
672 acpi_pcc_write_sset(pcc, SINF_DC_CUR_BRIGHT, val); in dc_brightness_store()
673 pcc->dc_brightness = val; in dc_brightness_store()
683 struct pcc_acpi *pcc = acpi_driver_data(acpi); in current_brightness_show() local
685 if (!acpi_pcc_retrieve_biosdata(pcc)) in current_brightness_show()
688 return snprintf(buf, PAGE_SIZE, "%u\n", pcc->sinf[SINF_CUR_BRIGHT]); in current_brightness_show()
695 struct pcc_acpi *pcc = acpi_driver_data(acpi); in current_brightness_store() local
703 err = acpi_pcc_write_sset(pcc, SINF_CUR_BRIGHT, val); in current_brightness_store()
704 pcc->current_brightness = val; in current_brightness_store()
760 static void acpi_pcc_generate_keyinput(struct pcc_acpi *pcc) in acpi_pcc_generate_keyinput() argument
762 struct input_dev *hotk_input_dev = pcc->input_dev; in acpi_pcc_generate_keyinput()
766 rc = acpi_evaluate_integer(pcc->handle, METHOD_HKEY_QUERY, in acpi_pcc_generate_keyinput()
791 struct pcc_acpi *pcc = acpi_driver_data(device); in acpi_pcc_hotkey_notify() local
795 acpi_pcc_generate_keyinput(pcc); in acpi_pcc_hotkey_notify()
811 static int pcc_register_optd_notifier(struct pcc_acpi *pcc, char *node) in pcc_register_optd_notifier() argument
821 pcc_optd_notify, pcc); in pcc_register_optd_notifier()
830 static void pcc_unregister_optd_notifier(struct pcc_acpi *pcc, char *node) in pcc_unregister_optd_notifier() argument
847 static int acpi_pcc_init_input(struct pcc_acpi *pcc) in acpi_pcc_init_input() argument
875 pcc->input_dev = input_dev; in acpi_pcc_init_input()
888 struct pcc_acpi *pcc; in acpi_pcc_hotkey_resume() local
893 pcc = acpi_driver_data(to_acpi_device(dev)); in acpi_pcc_hotkey_resume()
894 if (!pcc) in acpi_pcc_hotkey_resume()
897 acpi_pcc_write_sset(pcc, SINF_MUTE, pcc->mute); in acpi_pcc_hotkey_resume()
898 acpi_pcc_write_sset(pcc, SINF_ECO_MODE, pcc->eco_mode); in acpi_pcc_hotkey_resume()
899 acpi_pcc_write_sset(pcc, SINF_STICKY_KEY, pcc->sticky_key); in acpi_pcc_hotkey_resume()
900 acpi_pcc_write_sset(pcc, SINF_AC_CUR_BRIGHT, pcc->ac_brightness); in acpi_pcc_hotkey_resume()
901 acpi_pcc_write_sset(pcc, SINF_DC_CUR_BRIGHT, pcc->dc_brightness); in acpi_pcc_hotkey_resume()
902 acpi_pcc_write_sset(pcc, SINF_CUR_BRIGHT, pcc->current_brightness); in acpi_pcc_hotkey_resume()
911 struct pcc_acpi *pcc; in acpi_pcc_hotkey_add() local
924 pcc = kzalloc(sizeof(struct pcc_acpi), GFP_KERNEL); in acpi_pcc_hotkey_add()
925 if (!pcc) { in acpi_pcc_hotkey_add()
926 pr_err("Couldn't allocate mem for pcc"); in acpi_pcc_hotkey_add()
930 pcc->sinf = kcalloc(num_sifr + 1, sizeof(u32), GFP_KERNEL); in acpi_pcc_hotkey_add()
931 if (!pcc->sinf) { in acpi_pcc_hotkey_add()
936 pcc->device = device; in acpi_pcc_hotkey_add()
937 pcc->handle = device->handle; in acpi_pcc_hotkey_add()
938 pcc->num_sifr = num_sifr; in acpi_pcc_hotkey_add()
939 device->driver_data = pcc; in acpi_pcc_hotkey_add()
943 result = acpi_pcc_init_input(pcc); in acpi_pcc_hotkey_add()
949 if (!acpi_pcc_retrieve_biosdata(pcc)) { in acpi_pcc_hotkey_add()
957 props.max_brightness = pcc->sinf[SINF_AC_MAX_BRIGHT]; in acpi_pcc_hotkey_add()
958 pcc->backlight = backlight_device_register("panasonic", NULL, pcc, in acpi_pcc_hotkey_add()
960 if (IS_ERR(pcc->backlight)) { in acpi_pcc_hotkey_add()
961 result = PTR_ERR(pcc->backlight); in acpi_pcc_hotkey_add()
966 pcc->backlight->props.brightness = pcc->sinf[SINF_AC_CUR_BRIGHT]; in acpi_pcc_hotkey_add()
969 acpi_pcc_write_sset(pcc, SINF_STICKY_KEY, 0); in acpi_pcc_hotkey_add()
970 pcc->sticky_key = 0; in acpi_pcc_hotkey_add()
972 pcc->eco_mode = pcc->sinf[SINF_ECO_MODE]; in acpi_pcc_hotkey_add()
973 pcc->mute = pcc->sinf[SINF_MUTE]; in acpi_pcc_hotkey_add()
974 pcc->ac_brightness = pcc->sinf[SINF_AC_CUR_BRIGHT]; in acpi_pcc_hotkey_add()
975 pcc->dc_brightness = pcc->sinf[SINF_DC_CUR_BRIGHT]; in acpi_pcc_hotkey_add()
976 pcc->current_brightness = pcc->sinf[SINF_CUR_BRIGHT]; in acpi_pcc_hotkey_add()
985 pcc->platform = platform_device_register_simple("panasonic", in acpi_pcc_hotkey_add()
987 if (IS_ERR(pcc->platform)) { in acpi_pcc_hotkey_add()
988 result = PTR_ERR(pcc->platform); in acpi_pcc_hotkey_add()
991 result = device_create_file(&pcc->platform->dev, in acpi_pcc_hotkey_add()
993 pcc_register_optd_notifier(pcc, "\\_SB.PCI0.EHCI.ERHB.OPTD"); in acpi_pcc_hotkey_add()
997 pcc->platform = NULL; in acpi_pcc_hotkey_add()
1003 platform_device_unregister(pcc->platform); in acpi_pcc_hotkey_add()
1005 backlight_device_unregister(pcc->backlight); in acpi_pcc_hotkey_add()
1007 input_unregister_device(pcc->input_dev); in acpi_pcc_hotkey_add()
1009 kfree(pcc->sinf); in acpi_pcc_hotkey_add()
1011 kfree(pcc); in acpi_pcc_hotkey_add()
1018 struct pcc_acpi *pcc = acpi_driver_data(device); in acpi_pcc_hotkey_remove() local
1020 if (!device || !pcc) in acpi_pcc_hotkey_remove()
1023 if (pcc->platform) { in acpi_pcc_hotkey_remove()
1024 device_remove_file(&pcc->platform->dev, &dev_attr_cdpower); in acpi_pcc_hotkey_remove()
1025 platform_device_unregister(pcc->platform); in acpi_pcc_hotkey_remove()
1027 pcc_unregister_optd_notifier(pcc, "\\_SB.PCI0.EHCI.ERHB.OPTD"); in acpi_pcc_hotkey_remove()
1031 backlight_device_unregister(pcc->backlight); in acpi_pcc_hotkey_remove()
1033 input_unregister_device(pcc->input_dev); in acpi_pcc_hotkey_remove()
1035 kfree(pcc->sinf); in acpi_pcc_hotkey_remove()
1036 kfree(pcc); in acpi_pcc_hotkey_remove()