@@ -375,7 +375,11 @@ bool acpi_scan_is_offline(struct acpi_device *adev, bool uevent)
375
375
struct acpi_device_physical_node * pn ;
376
376
bool offline = true;
377
377
378
- mutex_lock (& adev -> physical_node_lock );
378
+ /*
379
+ * acpi_container_offline() calls this for all of the container's
380
+ * children under the container's physical_node_lock lock.
381
+ */
382
+ mutex_lock_nested (& adev -> physical_node_lock , SINGLE_DEPTH_NESTING );
379
383
380
384
list_for_each_entry (pn , & adev -> physical_node_list , node )
381
385
if (device_supports_offline (pn -> dev ) && !pn -> dev -> offline ) {
@@ -2388,9 +2392,6 @@ static void acpi_default_enumeration(struct acpi_device *device)
2388
2392
struct list_head resource_list ;
2389
2393
bool is_spi_i2c_slave = false;
2390
2394
2391
- if (!device -> pnp .type .platform_id || device -> handler )
2392
- return ;
2393
-
2394
2395
/*
2395
2396
* Do not enemerate SPI/I2C slaves as they will be enuerated by their
2396
<
10000
td data-grid-cell-id="diff-2e56fe74396573e933ce9e084a7fb78668c1c7939f516890e542a538bf14a460-2396-2397-1" data-selected="false" role="gridcell" style="background-color:var(--bgColor-default);text-align:center" tabindex="-1" valign="top" class="focusable-grid-cell diff-line-number position-relative diff-line-number-neutral left-side">2397
* respective parents.
@@ -2403,6 +2404,29 @@ static void acpi_default_enumeration(struct acpi_device *device)
2403
2404
acpi_create_platform_device (device );
2404
2405
}
2405
2406
2407
+ static const struct acpi_device_id generic_device_ids [] = {
2408
+ {"PRP0001" , },
2409
+ {"" , },
2410
+ };
2411
+
2412
+ static int acpi_generic_device_attach (struct acpi_device * adev ,
2413
+ const struct acpi_device_id * not_used )
2414
+ {
2415
+ /*
2416
+ * Since PRP0001 is the only ID handled here, the test below can be
2417
+ * unconditional.
2418
+ */
2419
+ if (adev -> data .of_compatible )
2420
+ acpi_default_enumeration (adev );
2421
+
2422
+ return 1 ;
2423
+ }
2424
+
2425
+ static struct acpi_scan_handler generic_device_handler = {
2426
+ .ids = generic_device_ids ,
2427
+ .attach = acpi_generic_device_attach ,
2428
+ };
2429
+
2406
2430
static int acpi_scan_attach_handler (struct acpi_device * device )
2407
2431
{
2408
2432
struct acpi_hardware_id * hwid ;
@@ -2428,8 +2452,6 @@ static int acpi_scan_attach_handler(struct acpi_device *device)
2428
2452
break ;
2429
2453
}
2430
2454
}
2431
- if (!ret )
2432
- acpi_default_enumeration (device );
2433
2455
2434
2456
return ret ;
2435
2457
}
@@ -2471,6 +2493,9 @@ static void acpi_bus_attach(struct acpi_device *device)
2471
2493
ret = device_attach (& device -> dev );
2472
2494
if (ret < 0 )
2473
2495
return ;
2496
+
2497
+ if (!ret && device -> pnp .type .platform_id )
2498
+ acpi_default_enumeration (device );
2474
2499
}
2475
2500
device -> flags .visited = true;
2476
2501
@@ -2629,6 +2654,8 @@ int __init acpi_scan_init(void)
2629
2654
acpi_pnp_init ();
2630
2655
acpi_int340x_thermal_init ();
2631
2656
2657
+ acpi_scan_add_handler (& generic_device_handler );
2658
+
2632
2659
mutex_lock (& acpi_scan_lock );
2633
2660
/*
2634
2661
* Enumerate devices in the ACPI namespace.
0 commit comments