Lines Matching defs:pcc
53 * add /proc/acpi/pcc/brightness interface for HAL access
162 #define ACPI_PCC_CLASS "pcc"
283 static int acpi_pcc_write_sset(struct pcc_acpi *pcc, int func, int val)
297 status = acpi_evaluate_object(pcc->handle, METHOD_HKEY_SSET,
318 static int acpi_pcc_retrieve_biosdata(struct pcc_acpi *pcc)
325 status = acpi_evaluate_object(pcc->handle, METHOD_HKEY_SINF, NULL,
339 if (pcc->num_sifr < hkey->package.count) {
348 pcc->sinf[i] = element->integer.value;
352 pcc->sinf[hkey->package.count] = -1;
368 struct pcc_acpi *pcc = bl_get_data(bd);
370 if (!acpi_pcc_retrieve_biosdata(pcc))
373 return pcc->sinf[SINF_AC_CUR_BRIGHT];
378 struct pcc_acpi *pcc = bl_get_data(bd);
382 if (!acpi_pcc_retrieve_biosdata(pcc))
385 if (bright < pcc->sinf[SINF_AC_MIN_BRIGHT])
386 bright = pcc->sinf[SINF_AC_MIN_BRIGHT];
388 if (bright < pcc->sinf[SINF_DC_MIN_BRIGHT])
389 bright = pcc->sinf[SINF_DC_MIN_BRIGHT];
391 if (bright < pcc->sinf[SINF_AC_MIN_BRIGHT] ||
392 bright > pcc->sinf[SINF_AC_MAX_BRIGHT])
395 rc = acpi_pcc_write_sset(pcc, SINF_AC_CUR_BRIGHT, bright);
399 return acpi_pcc_write_sset(pcc, SINF_DC_CUR_BRIGHT, bright);
506 struct pcc_acpi *pcc = acpi_driver_data(acpi);
508 if (!acpi_pcc_retrieve_biosdata(pcc))
511 return sysfs_emit(buf, "%u\n", pcc->sinf[SINF_NUM_BATTERIES]);
518 struct pcc_acpi *pcc = acpi_driver_data(acpi);
520 if (!acpi_pcc_retrieve_biosdata(pcc))
523 return sysfs_emit(buf, "%u\n", pcc->sinf[SINF_LCD_TYPE]);
530 struct pcc_acpi *pcc = acpi_driver_data(acpi);
532 if (!acpi_pcc_retrieve_biosdata(pcc))
535 return sysfs_emit(buf, "%u\n", pcc->sinf[SINF_MUTE]);
542 struct pcc_acpi *pcc = acpi_driver_data(acpi);
549 acpi_pcc_write_sset(pcc, SINF_MUTE, val);
550 pcc->mute = val;
560 struct pcc_acpi *pcc = acpi_driver_data(acpi);
562 if (!acpi_pcc_retrieve_biosdata(pcc))
565 return sysfs_emit(buf, "%u\n", pcc->sticky_key);
572 struct pcc_acpi *pcc = acpi_driver_data(acpi);
579 acpi_pcc_write_sset(pcc, SINF_STICKY_KEY, val);
580 pcc->sticky_key = val;
590 struct pcc_acpi *pcc = acpi_driver_data(acpi);
593 if (!acpi_pcc_retrieve_biosdata(pcc))
596 switch (pcc->sinf[SINF_ECO_MODE]) {
614 struct pcc_acpi *pcc = acpi_driver_data(acpi);
634 pcc->sinf[SINF_ECO_MODE] = 0;
635 pcc->eco_mode = 0;
639 pcc->sinf[SINF_ECO_MODE] = 1;
640 pcc->eco_mode = 1;
661 struct pcc_acpi *pcc = acpi_driver_data(acpi);
663 if (!acpi_pcc_retrieve_biosdata(pcc))
666 return sysfs_emit(buf, "%u\n", pcc->sinf[SINF_AC_CUR_BRIGHT]);
673 struct pcc_acpi *pcc = acpi_driver_data(acpi);
680 acpi_pcc_write_sset(pcc, SINF_AC_CUR_BRIGHT, val);
681 pcc->ac_brightness = val;
691 struct pcc_acpi *pcc = acpi_driver_data(acpi);
693 if (!acpi_pcc_retrieve_biosdata(pcc))
696 return sysfs_emit(buf, "%u\n", pcc->sinf[SINF_DC_CUR_BRIGHT]);
703 struct pcc_acpi *pcc = acpi_driver_data(acpi);
710 acpi_pcc_write_sset(pcc, SINF_DC_CUR_BRIGHT, val);
711 pcc->dc_brightness = val;
721 struct pcc_acpi *pcc = acpi_driver_data(acpi);
723 if (!acpi_pcc_retrieve_biosdata(pcc))
726 return sysfs_emit(buf, "%u\n", pcc->sinf[SINF_CUR_BRIGHT]);
733 struct pcc_acpi *pcc = acpi_driver_data(acpi);
741 err = acpi_pcc_write_sset(pcc, SINF_CUR_BRIGHT, val);
742 pcc->current_brightness = val;
798 static void acpi_pcc_generate_keyinput(struct pcc_acpi *pcc)
800 struct input_dev *hotk_input_dev = pcc->input_dev;
806 rc = acpi_evaluate_integer(pcc->handle, METHOD_HKEY_QUERY,
838 struct pcc_acpi *pcc = acpi_driver_data(device);
842 acpi_pcc_generate_keyinput(pcc);
858 static int pcc_register_optd_notifier(struct pcc_acpi *pcc, char *node)
868 pcc_optd_notify, pcc);
877 static void pcc_unregister_optd_notifier(struct pcc_acpi *pcc, char *node)
894 static int acpi_pcc_init_input(struct pcc_acpi *pcc)
922 pcc->input_dev = input_dev;
935 struct pcc_acpi *pcc;
940 pcc = acpi_driver_data(to_acpi_device(dev));
941 if (!pcc)
944 acpi_pcc_write_sset(pcc, SINF_MUTE, pcc->mute);
945 acpi_pcc_write_sset(pcc, SINF_ECO_MODE, pcc->eco_mode);
946 acpi_pcc_write_sset(pcc, SINF_STICKY_KEY, pcc->sticky_key);
947 acpi_pcc_write_sset(pcc, SINF_AC_CUR_BRIGHT, pcc->ac_brightness);
948 acpi_pcc_write_sset(pcc, SINF_DC_CUR_BRIGHT, pcc->dc_brightness);
949 acpi_pcc_write_sset(pcc, SINF_CUR_BRIGHT, pcc->current_brightness);
958 struct pcc_acpi *pcc;
971 pcc = kzalloc(sizeof(struct pcc_acpi), GFP_KERNEL);
972 if (!pcc) {
973 pr_err("Couldn't allocate mem for pcc");
977 pcc->sinf = kcalloc(num_sifr + 1, sizeof(u32), GFP_KERNEL);
978 if (!pcc->sinf) {
983 pcc->device = device;
984 pcc->handle = device->handle;
985 pcc->num_sifr = num_sifr;
986 device->driver_data = pcc;
990 result = acpi_pcc_init_input(pcc);
996 if (!acpi_pcc_retrieve_biosdata(pcc)) {
1006 props.max_brightness = pcc->sinf[SINF_AC_MAX_BRIGHT];
1008 pcc->backlight = backlight_device_register("panasonic", NULL, pcc,
1010 if (IS_ERR(pcc->backlight)) {
1011 result = PTR_ERR(pcc->backlight);
1016 pcc->backlight->props.brightness = pcc->sinf[SINF_AC_CUR_BRIGHT];
1020 acpi_pcc_write_sset(pcc, SINF_STICKY_KEY, 0);
1021 pcc->sticky_key = 0;
1023 pcc->eco_mode = pcc->sinf[SINF_ECO_MODE];
1024 pcc->mute = pcc->sinf[SINF_MUTE];
1025 pcc->ac_brightness = pcc->sinf[SINF_AC_CUR_BRIGHT];
1026 pcc->dc_brightness = pcc->sinf[SINF_DC_CUR_BRIGHT];
1027 pcc->current_brightness = pcc->sinf[SINF_CUR_BRIGHT];
1036 pcc->platform = platform_device_register_simple("panasonic",
1038 if (IS_ERR(pcc->platform)) {
1039 result = PTR_ERR(pcc->platform);
1042 result = device_create_file(&pcc->platform->dev,
1044 pcc_register_optd_notifier(pcc, "\\_SB.PCI0.EHCI.ERHB.OPTD");
1048 pcc->platform = NULL;
1055 platform_device_unregister(pcc->platform);
1057 backlight_device_unregister(pcc->backlight);
1059 input_unregister_device(pcc->input_dev);
1061 kfree(pcc->sinf);
1063 kfree(pcc);
1070 struct pcc_acpi *pcc = acpi_driver_data(device);
1072 if (!device || !pcc)
1077 if (pcc->platform) {
1078 device_remove_file(&pcc->platform->dev, &dev_attr_cdpower);
1079 platform_device_unregister(pcc->platform);
1081 pcc_unregister_optd_notifier(pcc, "\\_SB.PCI0.EHCI.ERHB.OPTD");
1085 backlight_device_unregister(pcc->backlight);
1087 input_unregister_device(pcc->input_dev);
1089 kfree(pcc->sinf);
1090 kfree(pcc);