mirror of
https://github.com/BobTheBlinker/android_kernel_motorola_sm6375.git
synced 2026-10-29 11:11:45 -04:00
dock: introduce .uevent for devices in dock, eg libata
dock's uevent reported itself, not ata. It might be difficult to find an ata device just according to a dock. This patch introduces docking ops for each device in a dock. when docking, dock driver can send device specific uevent. This should help dock station too (not just bay) Signed-off-by: Shaohua Li <[email protected]> Acked-by: Tejun Heo <[email protected]> Signed-off-by: Len Brown <[email protected]>
This commit is contained in:
parent
f730ae1838
commit
1253f7aabf
4 changed files with 68 additions and 13 deletions
|
|
@ -209,6 +209,46 @@ static void ata_acpi_ap_notify_dock(acpi_handle handle, u32 event, void *data)
|
|||
ata_acpi_handle_hotplug(ap, NULL, event);
|
||||
}
|
||||
|
||||
static void ata_acpi_uevent(struct ata_port *ap, struct ata_device *dev,
|
||||
u32 event)
|
||||
{
|
||||
struct kobject *kobj = NULL;
|
||||
char event_string[20];
|
||||
char *envp[] = { event_string, NULL };
|
||||
|
||||
if (dev) {
|
||||
if (dev->sdev)
|
||||
kobj = &dev->sdev->sdev_gendev.kobj;
|
||||
} else
|
||||
kobj = &ap->dev->kobj;
|
||||
|
||||
if (kobj) {
|
||||
snprintf(event_string, 20, "BAY_EVENT=%d", event);
|
||||
kobject_uevent_env(kobj, KOBJ_CHANGE, envp);
|
||||
}
|
||||
}
|
||||
|
||||
static void ata_acpi_ap_uevent(acpi_handle handle, u32 event, void *data)
|
||||
{
|
||||
ata_acpi_uevent(data, NULL, event);
|
||||
}
|
||||
|
||||
static void ata_acpi_dev_uevent(acpi_handle handle, u32 event, void *data)
|
||||
{
|
||||
struct ata_device *dev = data;
|
||||
ata_acpi_uevent(dev->link->ap, dev, event);
|
||||
}
|
||||
|
||||
static struct acpi_dock_ops ata_acpi_dev_dock_ops = {
|
||||
.handler = ata_acpi_dev_notify_dock,
|
||||
.uevent = ata_acpi_dev_uevent,
|
||||
};
|
||||
|
||||
static struct acpi_dock_ops ata_acpi_ap_dock_ops = {
|
||||
.handler = ata_acpi_ap_notify_dock,
|
||||
.uevent = ata_acpi_ap_uevent,
|
||||
};
|
||||
|
||||
/**
|
||||
* ata_acpi_associate - associate ATA host with ACPI objects
|
||||
* @host: target ATA host
|
||||
|
|
@ -244,7 +284,7 @@ void ata_acpi_associate(struct ata_host *host)
|
|||
if (ap->acpi_handle) {
|
||||
/* we might be on a docking station */
|
||||
register_hotplug_dock_device(ap->acpi_handle,
|
||||
ata_acpi_ap_notify_dock, ap);
|
||||
&ata_acpi_ap_dock_ops, ap);
|
||||
}
|
||||
|
||||
for (j = 0; j < ata_link_max_devices(&ap->link); j++) {
|
||||
|
|
@ -253,7 +293,7 @@ void ata_acpi_associate(struct ata_host *host)
|
|||
if (dev->acpi_handle) {
|
||||
/* we might be on a docking station */
|
||||
register_hotplug_dock_device(dev->acpi_handle,
|
||||
ata_acpi_dev_notify_dock, dev);
|
||||
&ata_acpi_dev_dock_ops, dev);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
|||
Loading…
Reference in a new issue