Skip to content

Commit

Permalink
---
Browse files Browse the repository at this point in the history
yaml
---
r: 62899
b: refs/heads/master
c: 1e1f3f2
h: refs/heads/master
i:
  62897: 1881663
  62895: 1d2c0c8
v: v3
  • Loading branch information
Len Brown committed Jul 25, 2007
1 parent a958237 commit 4f0dd78
Show file tree
Hide file tree
Showing 3 changed files with 63 additions and 30 deletions.
2 changes: 1 addition & 1 deletion [refs]
Original file line number Diff line number Diff line change
@@ -1,2 +1,2 @@
---
refs/heads/master: e8b2fd01228f690c3e0cb3f14facfa8d93d4adae
refs/heads/master: 1e1f3f24cdbc53e67acd7b2e37e6cf0cb11bd13c
59 changes: 41 additions & 18 deletions trunk/drivers/acpi/processor_throttling.c
Original file line number Diff line number Diff line change
Expand Up @@ -47,6 +47,9 @@ ACPI_MODULE_NAME("processor_throttling");
static int acpi_processor_get_throttling(struct acpi_processor *pr);
int acpi_processor_set_throttling(struct acpi_processor *pr, int state);

/*
* _TPC - Throttling Present Capabilities
*/
static int acpi_processor_get_platform_limit(struct acpi_processor *pr)
{
acpi_status status = 0;
Expand All @@ -55,8 +58,10 @@ static int acpi_processor_get_platform_limit(struct acpi_processor *pr)
if (!pr)
return -EINVAL;
status = acpi_evaluate_integer(pr->handle, "_TPC", NULL, &tpc);
if (ACPI_FAILURE(status) && status != AE_NOT_FOUND) {
ACPI_EXCEPTION((AE_INFO, status, "Evaluating _TPC"));
if (ACPI_FAILURE(status)) {
if (status != AE_NOT_FOUND) {
ACPI_EXCEPTION((AE_INFO, status, "Evaluating _TPC"));
}
return -ENODEV;
}
pr->throttling_platform_limit = (int)tpc;
Expand All @@ -68,9 +73,9 @@ int acpi_processor_tstate_has_changed(struct acpi_processor *pr)
return acpi_processor_get_platform_limit(pr);
}

/* --------------------------------------------------------------------------
_PTC, _TSS, _TSD support
-------------------------------------------------------------------------- */
/*
* _PTC - Processor Throttling Control (and status) register location
*/
static int acpi_processor_get_throttling_control(struct acpi_processor *pr)
{
int result = 0;
Expand All @@ -81,7 +86,9 @@ static int acpi_processor_get_throttling_control(struct acpi_processor *pr)

status = acpi_evaluate_object(pr->handle, "_PTC", NULL, &buffer);
if (ACPI_FAILURE(status)) {
ACPI_EXCEPTION((AE_INFO, status, "Evaluating _PTC"));
if (status != AE_NOT_FOUND) {
ACPI_EXCEPTION((AE_INFO, status, "Evaluating _PTC"));
}
return -ENODEV;
}

Expand Down Expand Up @@ -132,6 +139,10 @@ static int acpi_processor_get_throttling_control(struct acpi_processor *pr)

return result;
}

/*
* _TSS - Throttling Supported States
*/
static int acpi_processor_get_throttling_states(struct acpi_processor *pr)
{
int result = 0;
Expand All @@ -144,7 +155,9 @@ static int acpi_processor_get_throttling_states(struct acpi_processor *pr)

status = acpi_evaluate_object(pr->handle, "_TSS", NULL, &buffer);
if (ACPI_FAILURE(status)) {
ACPI_EXCEPTION((AE_INFO, status, "Evaluating _TSS"));
if (status != AE_NOT_FOUND) {
ACPI_EXCEPTION((AE_INFO, status, "Evaluating _TSS"));
}
return -ENODEV;
}

Expand Down Expand Up @@ -201,6 +214,10 @@ static int acpi_processor_get_throttling_states(struct acpi_processor *pr)

return result;
}

/*
* _TSD - T-State Dependencies
*/
static int acpi_processor_get_tsd(struct acpi_processor *pr)
{
int result = 0;
Expand All @@ -213,6 +230,9 @@ static int acpi_processor_get_tsd(struct acpi_processor *pr)

status = acpi_evaluate_object(pr->handle, "_TSD", NULL, &buffer);
if (ACPI_FAILURE(status)) {
if (status != AE_NOT_FOUND) {
ACPI_EXCEPTION((AE_INFO, status, "Evaluating _TSD"));
}
return -ENODEV;
}

Expand Down Expand Up @@ -525,9 +545,6 @@ int acpi_processor_get_throttling_info(struct acpi_processor *pr)
int result = 0;
int step = 0;
int i = 0;
int no_ptc = 0;
int no_tss = 0;
int no_tsd = 0;

ACPI_DEBUG_PRINT((ACPI_DB_INFO,
"pblk_address[0x%08x] duty_offset[%d] duty_width[%d]\n",
Expand All @@ -538,12 +555,14 @@ int acpi_processor_get_throttling_info(struct acpi_processor *pr)
if (!pr)
return -EINVAL;

/* TBD: Support ACPI 2.0 objects */
no_ptc = acpi_processor_get_throttling_control(pr);
no_tss = acpi_processor_get_throttling_states(pr);
no_tsd = acpi_processor_get_tsd(pr);

if (no_ptc || no_tss) {
/*
* Evaluate _PTC, _TSS and _TPC
* They must all be present or none of them can be used.
*/
if (acpi_processor_get_throttling_control(pr) ||
acpi_processor_get_throttling_states(pr) ||
acpi_processor_get_platform_limit(pr))
{
pr->throttling.acpi_processor_get_throttling =
&acpi_processor_get_throttling_fadt;
pr->throttling.acpi_processor_set_throttling =
Expand All @@ -555,6 +574,8 @@ int acpi_processor_get_throttling_info(struct acpi_processor *pr)
&acpi_processor_set_throttling_ptc;
}

acpi_processor_get_tsd(pr);

if (!pr->throttling.address) {
ACPI_DEBUG_PRINT((ACPI_DB_INFO, "No throttling register\n"));
return 0;
Expand Down Expand Up @@ -658,18 +679,20 @@ static int acpi_processor_throttling_seq_show(struct seq_file *seq,
pr->throttling.state_count - 1);

seq_puts(seq, "states:\n");
if (acpi_processor_get_throttling == acpi_processor_get_throttling_fadt)
if (pr->throttling.acpi_processor_get_throttling ==
acpi_processor_get_throttling_fadt) {
for (i = 0; i < pr->throttling.state_count; i++)
seq_printf(seq, " %cT%d: %02d%%\n",
(i == pr->throttling.state ? '*' : ' '), i,
(pr->throttling.states[i].performance ? pr->
throttling.states[i].performance / 10 : 0));
else
} else {
for (i = 0; i < pr->throttling.state_count; i++)
seq_printf(seq, " %cT%d: %02d%%\n",
(i == pr->throttling.state ? '*' : ' '), i,
(int)pr->throttling.states_tss[i].
freqpercentage);
}

end:
return 0;
Expand Down
32 changes: 21 additions & 11 deletions trunk/drivers/misc/asus-laptop.c
Original file line number Diff line number Diff line change
Expand Up @@ -1067,19 +1067,16 @@ static void asus_backlight_exit(void)
}

#define ASUS_LED_UNREGISTER(object) \
if(object##_led.class_dev \
&& !IS_ERR(object##_led.class_dev)) \
led_classdev_unregister(&object##_led)
led_classdev_unregister(&object##_led)

static void asus_led_exit(void)
{
destroy_workqueue(led_workqueue);
ASUS_LED_UNREGISTER(mled);
ASUS_LED_UNREGISTER(tled);
ASUS_LED_UNREGISTER(pled);
ASUS_LED_UNREGISTER(rled);
ASUS_LED_UNREGISTER(gled);

destroy_workqueue(led_workqueue);
}

static void __exit asus_laptop_exit(void)
Expand Down Expand Up @@ -1135,29 +1132,42 @@ static int asus_led_init(struct device *dev)

rv = ASUS_LED_REGISTER(mled, dev);
if (rv)
return rv;
goto out;

rv = ASUS_LED_REGISTER(tled, dev);
if (rv)
return rv;
goto out1;

rv = ASUS_LED_REGISTER(rled, dev);
if (rv)
return rv;
goto out2;

rv = ASUS_LED_REGISTER(pled, dev);
if (rv)
return rv;
goto out3;

rv = ASUS_LED_REGISTER(gled, dev);
if (rv)
return rv;
goto out4;

led_workqueue = create_singlethread_workqueue("led_workqueue");
if (!led_workqueue)
return -ENOMEM;
goto out5;

return 0;
out5:
rv = -ENOMEM;
ASUS_LED_UNREGISTER(gled);
out4:
ASUS_LED_UNREGISTER(pled);
out3:
ASUS_LED_UNREGISTER(rled);
out2:
ASUS_LED_UNREGISTER(tled);
out1:
ASUS_LED_UNREGISTER(mled);
out:
return rv;
}

static int __init asus_laptop_init(void)
Expand Down

0 comments on commit 4f0dd78

Please sign in to comment.