Skip to content

Commit

Permalink
ACPI: bay: Convert ACPI Bay driver to be compatible with sysfs update.
Browse files Browse the repository at this point in the history
	Set fake hid for ejectable drive bay.
	Match bay devices by checking the hid.
	Remove .match method of Bay driver.

Signed-off-by: Zhang Rui <rui.zhang@intel.com>
Signed-off-by: Len Brown <len.brown@intel.com>
  • Loading branch information
Zhang Rui authored and Len Brown committed Feb 3, 2007
1 parent 975a8e3 commit 5473526
Show file tree
Hide file tree
Showing 2 changed files with 41 additions and 17 deletions.
18 changes: 1 addition & 17 deletions 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 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 5473526

Please sign in to comment.