mirror of
https://github.com/u-boot/u-boot.git
synced 2025-04-22 20:58:22 +00:00
acpi: Add support for writing a _PRW
A 'Power Resource for Wake' list the resources a device depends on for wake. Add a function to generate this. Signed-off-by: Simon Glass <sjg@chromium.org>
This commit is contained in:
parent
99e555a79a
commit
e0a896b88f
3 changed files with 50 additions and 0 deletions
|
@ -563,4 +563,14 @@ int acpigen_set_enable_tx_gpio(struct acpi_ctx *ctx, u32 tx_state_val,
|
||||||
const char *dw0_read, const char *dw0_write,
|
const char *dw0_read, const char *dw0_write,
|
||||||
struct acpi_gpio *gpio, bool enable);
|
struct acpi_gpio *gpio, bool enable);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* acpigen_write_prw() - Write a power resource for wake (_PRW)
|
||||||
|
*
|
||||||
|
* @ctx: ACPI context pointer
|
||||||
|
* @wake: GPE that wakes up the device
|
||||||
|
* @level: Deepest power system sleeping state that can be entered while still
|
||||||
|
* providing wake functionality
|
||||||
|
*/
|
||||||
|
void acpigen_write_prw(struct acpi_ctx *ctx, uint wake, uint level);
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
|
|
@ -426,6 +426,16 @@ void acpigen_write_register_resource(struct acpi_ctx *ctx,
|
||||||
acpigen_write_resourcetemplate_footer(ctx);
|
acpigen_write_resourcetemplate_footer(ctx);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void acpigen_write_prw(struct acpi_ctx *ctx, uint wake, uint level)
|
||||||
|
{
|
||||||
|
/* Name (_PRW, Package () { wake, level } */
|
||||||
|
acpigen_write_name(ctx, "_PRW");
|
||||||
|
acpigen_write_package(ctx, 2);
|
||||||
|
acpigen_write_integer(ctx, wake);
|
||||||
|
acpigen_write_integer(ctx, level);
|
||||||
|
acpigen_pop_len(ctx);
|
||||||
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* ToUUID(uuid)
|
* ToUUID(uuid)
|
||||||
*
|
*
|
||||||
|
|
|
@ -1097,3 +1097,33 @@ static int dm_test_acpi_write_name(struct unit_test_state *uts)
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
DM_TEST(dm_test_acpi_write_name, 0);
|
DM_TEST(dm_test_acpi_write_name, 0);
|
||||||
|
|
||||||
|
/* Test emitting a _PRW component */
|
||||||
|
static int dm_test_acpi_write_prw(struct unit_test_state *uts)
|
||||||
|
{
|
||||||
|
struct acpi_ctx *ctx;
|
||||||
|
u8 *ptr;
|
||||||
|
|
||||||
|
ut_assertok(alloc_context(&ctx));
|
||||||
|
|
||||||
|
ptr = acpigen_get_current(ctx);
|
||||||
|
acpigen_write_prw(ctx, 5, 3);
|
||||||
|
ut_asserteq(NAME_OP, *ptr++);
|
||||||
|
|
||||||
|
ut_asserteq_strn("_PRW", (char *)ptr);
|
||||||
|
ptr += 4;
|
||||||
|
ut_asserteq(PACKAGE_OP, *ptr++);
|
||||||
|
ut_asserteq(8, acpi_test_get_length(ptr));
|
||||||
|
ptr += 3;
|
||||||
|
ut_asserteq(2, *ptr++);
|
||||||
|
ut_asserteq(BYTE_PREFIX, *ptr++);
|
||||||
|
ut_asserteq(5, *ptr++);
|
||||||
|
ut_asserteq(BYTE_PREFIX, *ptr++);
|
||||||
|
ut_asserteq(3, *ptr++);
|
||||||
|
ut_asserteq_ptr(ptr, ctx->current);
|
||||||
|
|
||||||
|
free_context(&ctx);
|
||||||
|
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
DM_TEST(dm_test_acpi_write_prw, 0);
|
||||||
|
|
Loading…
Add table
Reference in a new issue