Skip to content

Commit

Permalink
---
Browse files Browse the repository at this point in the history
yaml
---
r: 46456
b: refs/heads/master
c: 5473526
h: refs/heads/master
v: v3
  • Loading branch information
Zhang Rui authored and Len Brown committed Feb 3, 2007
1 parent f3ccb4a commit ebe9dcf
Show file tree
Hide file tree
Showing 3 changed files with 42 additions and 18 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: 975a8e3ed2b9eab9f062a1e0ba7fe180e15204e1
refs/heads/master: 547352660506ab99d6b0bad58dea495bf3718cee
18 changes: 1 addition & 17 deletions trunk/drivers/acpi/bay.c
Original file line number Diff line number Diff line change
Expand Up @@ -49,16 +49,14 @@ MODULE_LICENSE("GPL");
static void bay_notify(acpi_handle handle, u32 event, void *data);
static int acpi_bay_add(struct acpi_device *device);
static int acpi_bay_remove(struct acpi_device *device, int type);
static int acpi_bay_match(struct acpi_device *device,
struct acpi_driver *driver);

static struct acpi_driver acpi_bay_driver = {
.name = ACPI_BAY_DRIVER_NAME,
.class = ACPI_BAY_CLASS,
.ids = ACPI_BAY_HID,
.ops = {
.add = acpi_bay_add,
.remove = acpi_bay_remove,
.match = acpi_bay_match,
},
};

Expand Down Expand Up @@ -347,20 +345,6 @@ static int acpi_bay_remove(struct acpi_device *device, int type)
return 0;
}

static int acpi_bay_match(struct acpi_device *device,
struct acpi_driver *driver)
{
if (!device || !driver)
return -EINVAL;

if (is_ejectable_bay(device->handle)) {
bay_dprintk(device->handle, "matching bay device");
return 0;
}

return -ENODEV;
}

/**
* bay_create_acpi_device - add new devices to acpi
* @handle - handle of the device to add
Expand Down
40 changes: 40 additions & 0 deletions trunk/drivers/acpi/scan.c
Original file line number Diff line number Diff line change
Expand Up @@ -837,6 +837,42 @@ acpi_video_bus_match(struct acpi_device *device)
return -ENODEV;
}

/*
* acpi_bay_match - see if a device is an ejectable driver bay
*
* If an acpi object is ejectable and has one of the ACPI ATA methods defined,
* then we can safely call it an ejectable drive bay
*/
static int acpi_bay_match(struct acpi_device *device){
acpi_status status;
acpi_handle handle;
acpi_handle tmp;
acpi_handle phandle;

handle = device->handle;

status = acpi_get_handle(handle, "_EJ0", &tmp);
if (ACPI_FAILURE(status))
return -ENODEV;

if ((ACPI_SUCCESS(acpi_get_handle(handle, "_GTF", &tmp))) ||
(ACPI_SUCCESS(acpi_get_handle(handle, "_GTM", &tmp))) ||
(ACPI_SUCCESS(acpi_get_handle(handle, "_STM", &tmp))) ||
(ACPI_SUCCESS(acpi_get_handle(handle, "_SDD", &tmp))))
return 0;

if (acpi_get_parent(handle, &phandle))
return -ENODEV;

if ((ACPI_SUCCESS(acpi_get_handle(phandle, "_GTF", &tmp))) ||
(ACPI_SUCCESS(acpi_get_handle(phandle, "_GTM", &tmp))) ||
(ACPI_SUCCESS(acpi_get_handle(phandle, "_STM", &tmp))) ||
(ACPI_SUCCESS(acpi_get_handle(phandle, "_SDD", &tmp))))
return 0;

return -ENODEV;
}

static void acpi_device_set_id(struct acpi_device *device,
struct acpi_device *parent, acpi_handle handle,
int type)
Expand Down Expand Up @@ -872,6 +908,10 @@ static void acpi_device_set_id(struct acpi_device *device,
status = acpi_video_bus_match(device);
if(ACPI_SUCCESS(status))
hid = ACPI_VIDEO_HID;

status = acpi_bay_match(device);
if (ACPI_SUCCESS(status))
hid = ACPI_BAY_HID;
}
break;
case ACPI_BUS_TYPE_POWER:
Expand Down

0 comments on commit ebe9dcf

Please sign in to comment.