Merge commit 'v2.6.26' into bkl-removal
This commit is contained in:
+13
-7
@@ -28,6 +28,7 @@
|
||||
#include <linux/input.h>
|
||||
#include <linux/module.h>
|
||||
#include <linux/mutex.h>
|
||||
#include <linux/sched.h>
|
||||
|
||||
/*
|
||||
* Check that the effect_id is a valid effect and whether the user
|
||||
@@ -166,8 +167,10 @@ int input_ff_upload(struct input_dev *dev, struct ff_effect *effect,
|
||||
if (ret)
|
||||
goto out;
|
||||
|
||||
spin_lock_irq(&dev->event_lock);
|
||||
ff->effects[id] = *effect;
|
||||
ff->effect_owners[id] = file;
|
||||
spin_unlock_irq(&dev->event_lock);
|
||||
|
||||
out:
|
||||
mutex_unlock(&ff->mutex);
|
||||
@@ -189,15 +192,21 @@ static int erase_effect(struct input_dev *dev, int effect_id,
|
||||
if (error)
|
||||
return error;
|
||||
|
||||
spin_lock_irq(&dev->event_lock);
|
||||
ff->playback(dev, effect_id, 0);
|
||||
ff->effect_owners[effect_id] = NULL;
|
||||
spin_unlock_irq(&dev->event_lock);
|
||||
|
||||
if (ff->erase) {
|
||||
error = ff->erase(dev, effect_id);
|
||||
if (error)
|
||||
return error;
|
||||
}
|
||||
if (error) {
|
||||
spin_lock_irq(&dev->event_lock);
|
||||
ff->effect_owners[effect_id] = file;
|
||||
spin_unlock_irq(&dev->event_lock);
|
||||
|
||||
ff->effect_owners[effect_id] = NULL;
|
||||
return error;
|
||||
}
|
||||
}
|
||||
|
||||
return 0;
|
||||
}
|
||||
@@ -263,8 +272,6 @@ int input_ff_event(struct input_dev *dev, unsigned int type,
|
||||
if (type != EV_FF)
|
||||
return 0;
|
||||
|
||||
mutex_lock(&ff->mutex);
|
||||
|
||||
switch (code) {
|
||||
case FF_GAIN:
|
||||
if (!test_bit(FF_GAIN, dev->ffbit) || value > 0xffff)
|
||||
@@ -286,7 +293,6 @@ int input_ff_event(struct input_dev *dev, unsigned int type,
|
||||
break;
|
||||
}
|
||||
|
||||
mutex_unlock(&ff->mutex);
|
||||
return 0;
|
||||
}
|
||||
EXPORT_SYMBOL_GPL(input_ff_event);
|
||||
|
||||
@@ -183,4 +183,4 @@ module_exit(aaedkbd_exit);
|
||||
|
||||
MODULE_AUTHOR("Nicolas Bellido Y Ortega");
|
||||
MODULE_DESCRIPTION("AAED-2000 Keyboard Driver");
|
||||
MODULE_LICENSE("GPLv2");
|
||||
MODULE_LICENSE("GPL v2");
|
||||
|
||||
@@ -807,6 +807,8 @@ static int atkbd_activate(struct atkbd *atkbd)
|
||||
static void atkbd_cleanup(struct serio *serio)
|
||||
{
|
||||
struct atkbd *atkbd = serio_get_drvdata(serio);
|
||||
|
||||
atkbd_disable(atkbd);
|
||||
ps2_command(&atkbd->ps2dev, NULL, ATKBD_CMD_RESET_BAT);
|
||||
}
|
||||
|
||||
|
||||
@@ -412,5 +412,5 @@ module_exit(corgikbd_exit);
|
||||
|
||||
MODULE_AUTHOR("Richard Purdie <rpurdie@rpsys.net>");
|
||||
MODULE_DESCRIPTION("Corgi Keyboard Driver");
|
||||
MODULE_LICENSE("GPLv2");
|
||||
MODULE_LICENSE("GPL v2");
|
||||
MODULE_ALIAS("platform:corgi-keyboard");
|
||||
|
||||
@@ -275,5 +275,5 @@ module_exit(jornada680kbd_exit);
|
||||
|
||||
MODULE_AUTHOR("Kristoffer Ericson <kristoffer.ericson@gmail.com>");
|
||||
MODULE_DESCRIPTION("HP Jornada 620/660/680/690 Keyboard Driver");
|
||||
MODULE_LICENSE("GPLv2");
|
||||
MODULE_LICENSE("GPL v2");
|
||||
MODULE_ALIAS("platform:jornada680_kbd");
|
||||
|
||||
@@ -29,7 +29,7 @@
|
||||
|
||||
MODULE_AUTHOR("Kristoffer Ericson <Kristoffer.Ericson@gmail.com>");
|
||||
MODULE_DESCRIPTION("HP Jornada 710/720/728 keyboard driver");
|
||||
MODULE_LICENSE("GPLv2");
|
||||
MODULE_LICENSE("GPL v2");
|
||||
|
||||
static unsigned short jornada_std_keymap[128] = { /* ROW */
|
||||
0, KEY_ESC, KEY_F1, KEY_F2, KEY_F3, KEY_F4, KEY_F5, KEY_F6, KEY_F7, /* #1 */
|
||||
|
||||
@@ -136,6 +136,9 @@ static void pxa27x_keypad_build_keycode(struct pxa27x_keypad *keypad)
|
||||
set_bit(code, input_dev->keybit);
|
||||
}
|
||||
|
||||
for (i = 0; i < pdata->direct_key_num; i++)
|
||||
set_bit(pdata->direct_key_map[i], input_dev->keybit);
|
||||
|
||||
keypad->rotary_up_key[0] = pdata->rotary0_up_key;
|
||||
keypad->rotary_up_key[1] = pdata->rotary1_up_key;
|
||||
keypad->rotary_down_key[0] = pdata->rotary0_down_key;
|
||||
@@ -143,17 +146,21 @@ static void pxa27x_keypad_build_keycode(struct pxa27x_keypad *keypad)
|
||||
keypad->rotary_rel_code[0] = pdata->rotary0_rel_code;
|
||||
keypad->rotary_rel_code[1] = pdata->rotary1_rel_code;
|
||||
|
||||
if (pdata->rotary0_up_key && pdata->rotary0_down_key) {
|
||||
set_bit(pdata->rotary0_up_key, input_dev->keybit);
|
||||
set_bit(pdata->rotary0_down_key, input_dev->keybit);
|
||||
} else
|
||||
set_bit(pdata->rotary0_rel_code, input_dev->relbit);
|
||||
if (pdata->enable_rotary0) {
|
||||
if (pdata->rotary0_up_key && pdata->rotary0_down_key) {
|
||||
set_bit(pdata->rotary0_up_key, input_dev->keybit);
|
||||
set_bit(pdata->rotary0_down_key, input_dev->keybit);
|
||||
} else
|
||||
set_bit(pdata->rotary0_rel_code, input_dev->relbit);
|
||||
}
|
||||
|
||||
if (pdata->rotary1_up_key && pdata->rotary1_down_key) {
|
||||
set_bit(pdata->rotary1_up_key, input_dev->keybit);
|
||||
set_bit(pdata->rotary1_down_key, input_dev->keybit);
|
||||
} else
|
||||
set_bit(pdata->rotary1_rel_code, input_dev->relbit);
|
||||
if (pdata->enable_rotary1) {
|
||||
if (pdata->rotary1_up_key && pdata->rotary1_down_key) {
|
||||
set_bit(pdata->rotary1_up_key, input_dev->keybit);
|
||||
set_bit(pdata->rotary1_down_key, input_dev->keybit);
|
||||
} else
|
||||
set_bit(pdata->rotary1_rel_code, input_dev->relbit);
|
||||
}
|
||||
}
|
||||
|
||||
static inline unsigned int lookup_matrix_keycode(
|
||||
@@ -484,8 +491,13 @@ static int __devinit pxa27x_keypad_probe(struct platform_device *pdev)
|
||||
keypad->input_dev = input_dev;
|
||||
input_set_drvdata(input_dev, keypad);
|
||||
|
||||
input_dev->evbit[0] = BIT_MASK(EV_KEY) | BIT_MASK(EV_REP) |
|
||||
BIT_MASK(EV_REL);
|
||||
input_dev->evbit[0] = BIT_MASK(EV_KEY) | BIT_MASK(EV_REP);
|
||||
if ((keypad->pdata->enable_rotary0 &&
|
||||
keypad->pdata->rotary0_rel_code) ||
|
||||
(keypad->pdata->enable_rotary1 &&
|
||||
keypad->pdata->rotary1_rel_code)) {
|
||||
input_dev->evbit[0] |= BIT_MASK(EV_REL);
|
||||
}
|
||||
|
||||
pxa27x_keypad_build_keycode(keypad);
|
||||
platform_set_drvdata(pdev, keypad);
|
||||
|
||||
@@ -494,5 +494,5 @@ module_exit(spitzkbd_exit);
|
||||
|
||||
MODULE_AUTHOR("Richard Purdie <rpurdie@rpsys.net>");
|
||||
MODULE_DESCRIPTION("Spitz Keyboard Driver");
|
||||
MODULE_LICENSE("GPLv2");
|
||||
MODULE_LICENSE("GPL v2");
|
||||
MODULE_ALIAS("platform:spitz-keyboard");
|
||||
|
||||
@@ -15,7 +15,6 @@ if INPUT_MISC
|
||||
config INPUT_PCSPKR
|
||||
tristate "PC Speaker support"
|
||||
depends on PCSPKR_PLATFORM
|
||||
depends on SND_PCSP=n
|
||||
help
|
||||
Say Y here if you want the standard PC Speaker to be used for
|
||||
bells and whistles.
|
||||
|
||||
@@ -20,7 +20,6 @@
|
||||
#include <linux/module.h>
|
||||
#include <linux/ioport.h>
|
||||
#include <linux/io.h>
|
||||
#include <linux/module.h>
|
||||
#include <linux/input-polldev.h>
|
||||
#include <linux/i2c.h>
|
||||
#include <linux/workqueue.h>
|
||||
|
||||
@@ -589,6 +589,21 @@ static void atp_close(struct input_dev *input)
|
||||
dev->open = 0;
|
||||
}
|
||||
|
||||
static int atp_handle_geyser(struct atp *dev)
|
||||
{
|
||||
struct usb_device *udev = dev->udev;
|
||||
|
||||
if (!atp_is_fountain(dev)) {
|
||||
/* switch to raw sensor mode */
|
||||
if (atp_geyser_init(udev))
|
||||
return -EIO;
|
||||
|
||||
printk(KERN_INFO "appletouch: Geyser mode initialized.\n");
|
||||
}
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
static int atp_probe(struct usb_interface *iface, const struct usb_device_id *id)
|
||||
{
|
||||
struct atp *dev;
|
||||
@@ -633,14 +648,6 @@ static int atp_probe(struct usb_interface *iface, const struct usb_device_id *id
|
||||
else
|
||||
dev->datalen = 81;
|
||||
|
||||
if (!atp_is_fountain(dev)) {
|
||||
/* switch to raw sensor mode */
|
||||
if (atp_geyser_init(udev))
|
||||
goto err_free_devs;
|
||||
|
||||
printk(KERN_INFO "appletouch: Geyser mode initialized.\n");
|
||||
}
|
||||
|
||||
dev->urb = usb_alloc_urb(0, GFP_KERNEL);
|
||||
if (!dev->urb)
|
||||
goto err_free_devs;
|
||||
@@ -654,6 +661,10 @@ static int atp_probe(struct usb_interface *iface, const struct usb_device_id *id
|
||||
usb_rcvintpipe(udev, int_in_endpointAddr),
|
||||
dev->data, dev->datalen, atp_complete, dev, 1);
|
||||
|
||||
error = atp_handle_geyser(dev);
|
||||
if (error)
|
||||
goto err_free_buffer;
|
||||
|
||||
usb_make_path(udev, dev->phys, sizeof(dev->phys));
|
||||
strlcat(dev->phys, "/input0", sizeof(dev->phys));
|
||||
|
||||
@@ -744,6 +755,20 @@ static void atp_disconnect(struct usb_interface *iface)
|
||||
printk(KERN_INFO "input: appletouch disconnected\n");
|
||||
}
|
||||
|
||||
static int atp_recover(struct atp *dev)
|
||||
{
|
||||
int error;
|
||||
|
||||
error = atp_handle_geyser(dev);
|
||||
if (error)
|
||||
return error;
|
||||
|
||||
if (dev->open && usb_submit_urb(dev->urb, GFP_ATOMIC))
|
||||
return -EIO;
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
static int atp_suspend(struct usb_interface *iface, pm_message_t message)
|
||||
{
|
||||
struct atp *dev = usb_get_intfdata(iface);
|
||||
@@ -764,12 +789,20 @@ static int atp_resume(struct usb_interface *iface)
|
||||
return 0;
|
||||
}
|
||||
|
||||
static int atp_reset_resume(struct usb_interface *iface)
|
||||
{
|
||||
struct atp *dev = usb_get_intfdata(iface);
|
||||
|
||||
return atp_recover(dev);
|
||||
}
|
||||
|
||||
static struct usb_driver atp_driver = {
|
||||
.name = "appletouch",
|
||||
.probe = atp_probe,
|
||||
.disconnect = atp_disconnect,
|
||||
.suspend = atp_suspend,
|
||||
.resume = atp_resume,
|
||||
.reset_resume = atp_reset_resume,
|
||||
.id_table = atp_table,
|
||||
};
|
||||
|
||||
|
||||
@@ -192,6 +192,13 @@ static struct dmi_system_id __initdata i8042_dmi_nomux_table[] = {
|
||||
DMI_MATCH(DMI_PRODUCT_NAME, "AMILO Pro V2010"),
|
||||
},
|
||||
},
|
||||
{
|
||||
.ident = "Fujitsu-Siemens Amilo Pro 2030",
|
||||
.matches = {
|
||||
DMI_MATCH(DMI_SYS_VENDOR, "FUJITSU SIEMENS"),
|
||||
DMI_MATCH(DMI_PRODUCT_NAME, "AMILO PRO V2030"),
|
||||
},
|
||||
},
|
||||
{
|
||||
/*
|
||||
* No data is coming from the touchscreen unless KBC
|
||||
@@ -330,6 +337,13 @@ static struct dmi_system_id __initdata i8042_dmi_dritek_table[] = {
|
||||
DMI_MATCH(DMI_PRODUCT_NAME, "Aspire 9110"),
|
||||
},
|
||||
},
|
||||
{
|
||||
.ident = "Acer TravelMate 660",
|
||||
.matches = {
|
||||
DMI_MATCH(DMI_SYS_VENDOR, "Acer"),
|
||||
DMI_MATCH(DMI_PRODUCT_NAME, "TravelMate 660"),
|
||||
},
|
||||
},
|
||||
{
|
||||
.ident = "Acer TravelMate 2490",
|
||||
.matches = {
|
||||
|
||||
+31
-10
@@ -885,6 +885,20 @@ static long i8042_panic_blink(long count)
|
||||
|
||||
#undef DELAY
|
||||
|
||||
#ifdef CONFIG_X86
|
||||
static void i8042_dritek_enable(void)
|
||||
{
|
||||
char param = 0x90;
|
||||
int error;
|
||||
|
||||
error = i8042_command(¶m, 0x1059);
|
||||
if (error)
|
||||
printk(KERN_WARNING
|
||||
"Failed to enable DRITEK extension: %d\n",
|
||||
error);
|
||||
}
|
||||
#endif
|
||||
|
||||
#ifdef CONFIG_PM
|
||||
/*
|
||||
* Here we try to restore the original BIOS settings. We only want to
|
||||
@@ -938,10 +952,20 @@ static int i8042_resume(struct platform_device *dev)
|
||||
i8042_ctr |= I8042_CTR_AUXDIS | I8042_CTR_KBDDIS;
|
||||
i8042_ctr &= ~(I8042_CTR_AUXINT | I8042_CTR_KBDINT);
|
||||
if (i8042_command(&i8042_ctr, I8042_CMD_CTL_WCTR)) {
|
||||
printk(KERN_ERR "i8042: Can't write CTR to resume\n");
|
||||
return -EIO;
|
||||
printk(KERN_WARNING "i8042: Can't write CTR to resume, retrying...\n");
|
||||
msleep(50);
|
||||
if (i8042_command(&i8042_ctr, I8042_CMD_CTL_WCTR)) {
|
||||
printk(KERN_ERR "i8042: CTR write retry failed\n");
|
||||
return -EIO;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
#ifdef CONFIG_X86
|
||||
if (i8042_dritek)
|
||||
i8042_dritek_enable();
|
||||
#endif
|
||||
|
||||
if (i8042_mux_present) {
|
||||
if (i8042_set_mux_mode(1, NULL) || i8042_enable_mux_ports())
|
||||
printk(KERN_WARNING
|
||||
@@ -1160,6 +1184,11 @@ static int __devinit i8042_probe(struct platform_device *dev)
|
||||
if (error)
|
||||
return error;
|
||||
|
||||
#ifdef CONFIG_X86
|
||||
if (i8042_dritek)
|
||||
i8042_dritek_enable();
|
||||
#endif
|
||||
|
||||
if (!i8042_noaux) {
|
||||
error = i8042_setup_aux();
|
||||
if (error && error != -ENODEV && error != -EBUSY)
|
||||
@@ -1171,14 +1200,6 @@ static int __devinit i8042_probe(struct platform_device *dev)
|
||||
if (error)
|
||||
goto out_fail;
|
||||
}
|
||||
#ifdef CONFIG_X86
|
||||
if (i8042_dritek) {
|
||||
char param = 0x90;
|
||||
error = i8042_command(¶m, 0x1059);
|
||||
if (error)
|
||||
goto out_fail;
|
||||
}
|
||||
#endif
|
||||
/*
|
||||
* Ok, everything is ready, let's register all serio ports
|
||||
*/
|
||||
|
||||
@@ -830,7 +830,7 @@ static int gtco_probe(struct usb_interface *usbinterface,
|
||||
struct gtco *gtco;
|
||||
struct input_dev *input_dev;
|
||||
struct hid_descriptor *hid_desc;
|
||||
char *report = NULL;
|
||||
char *report;
|
||||
int result = 0, retry;
|
||||
int error;
|
||||
struct usb_endpoint_descriptor *endpoint;
|
||||
@@ -916,12 +916,16 @@ static int gtco_probe(struct usb_interface *usbinterface,
|
||||
le16_to_cpu(hid_desc->wDescriptorLength),
|
||||
5000); /* 5 secs */
|
||||
|
||||
if (result == le16_to_cpu(hid_desc->wDescriptorLength))
|
||||
dbg("usb_control_msg result: %d", result);
|
||||
if (result == le16_to_cpu(hid_desc->wDescriptorLength)) {
|
||||
parse_hid_report_descriptor(gtco, report, result);
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
kfree(report);
|
||||
|
||||
/* If we didn't get the report, fail */
|
||||
dbg("usb_control_msg result: :%d", result);
|
||||
if (result != le16_to_cpu(hid_desc->wDescriptorLength)) {
|
||||
err("Failed to get HID Report Descriptor of size: %d",
|
||||
hid_desc->wDescriptorLength);
|
||||
@@ -929,12 +933,6 @@ static int gtco_probe(struct usb_interface *usbinterface,
|
||||
goto err_free_urb;
|
||||
}
|
||||
|
||||
/* Now we parse the report */
|
||||
parse_hid_report_descriptor(gtco, report, result);
|
||||
|
||||
/* Now we delete it */
|
||||
kfree(report);
|
||||
|
||||
/* Create a device file node */
|
||||
usb_make_path(gtco->usbdev, gtco->usbpath, sizeof(gtco->usbpath));
|
||||
strlcat(gtco->usbpath, "/input0", sizeof(gtco->usbpath));
|
||||
@@ -988,7 +986,6 @@ static int gtco_probe(struct usb_interface *usbinterface,
|
||||
usb_buffer_free(gtco->usbdev, REPORT_MAX_SIZE,
|
||||
gtco->buffer, gtco->buf_dma);
|
||||
err_free_devs:
|
||||
kfree(report);
|
||||
input_free_device(input_dev);
|
||||
kfree(gtco);
|
||||
return error;
|
||||
|
||||
@@ -24,7 +24,7 @@
|
||||
|
||||
MODULE_AUTHOR("Kristoffer Ericson <kristoffer.ericson@gmail.com>");
|
||||
MODULE_DESCRIPTION("HP Jornada 710/720/728 touchscreen driver");
|
||||
MODULE_LICENSE("GPLv2");
|
||||
MODULE_LICENSE("GPL v2");
|
||||
|
||||
struct jornada_ts {
|
||||
struct input_dev *dev;
|
||||
|
||||
@@ -84,6 +84,15 @@ static int delay = 4;
|
||||
module_param(delay, int, 0);
|
||||
MODULE_PARM_DESC(delay, "Set adc sample delay.");
|
||||
|
||||
/*
|
||||
* Set five_wire = 1 to use a 5 wire touchscreen.
|
||||
*
|
||||
* NOTE: Five wire mode does not allow for readback of pressure.
|
||||
*/
|
||||
static int five_wire;
|
||||
module_param(five_wire, int, 0);
|
||||
MODULE_PARM_DESC(five_wire, "Set to '1' to use 5-wire touchscreen.");
|
||||
|
||||
/*
|
||||
* Set adc mask function.
|
||||
*
|
||||
@@ -162,6 +171,19 @@ static void wm9713_phy_init(struct wm97xx *wm)
|
||||
64000 / rpu);
|
||||
}
|
||||
|
||||
/* Five wire panel? */
|
||||
if (five_wire) {
|
||||
dig3 |= WM9713_45W;
|
||||
dev_info(wm->dev, "setting 5-wire touchscreen mode.");
|
||||
|
||||
if (pil) {
|
||||
dev_warn(wm->dev,
|
||||
"Pressure measurement not supported in 5 "
|
||||
"wire mode, disabling\n");
|
||||
pil = 0;
|
||||
}
|
||||
}
|
||||
|
||||
/* touchpanel pressure */
|
||||
if (pil == 2) {
|
||||
dig3 |= WM9712_PIL;
|
||||
|
||||
@@ -608,6 +608,17 @@ static int wm97xx_probe(struct device *dev)
|
||||
goto alloc_err;
|
||||
}
|
||||
|
||||
/* set up physical characteristics */
|
||||
wm->codec->phy_init(wm);
|
||||
|
||||
/* load gpio cache */
|
||||
wm->gpio[0] = wm97xx_reg_read(wm, AC97_GPIO_CFG);
|
||||
wm->gpio[1] = wm97xx_reg_read(wm, AC97_GPIO_POLARITY);
|
||||
wm->gpio[2] = wm97xx_reg_read(wm, AC97_GPIO_STICKY);
|
||||
wm->gpio[3] = wm97xx_reg_read(wm, AC97_GPIO_WAKEUP);
|
||||
wm->gpio[4] = wm97xx_reg_read(wm, AC97_GPIO_STATUS);
|
||||
wm->gpio[5] = wm97xx_reg_read(wm, AC97_MISC_AFE);
|
||||
|
||||
wm->input_dev = input_allocate_device();
|
||||
if (wm->input_dev == NULL) {
|
||||
ret = -ENOMEM;
|
||||
@@ -616,6 +627,7 @@ static int wm97xx_probe(struct device *dev)
|
||||
|
||||
/* set up touch configuration */
|
||||
wm->input_dev->name = "wm97xx touchscreen";
|
||||
wm->input_dev->phys = "wm97xx";
|
||||
wm->input_dev->open = wm97xx_ts_input_open;
|
||||
wm->input_dev->close = wm97xx_ts_input_close;
|
||||
set_bit(EV_ABS, wm->input_dev->evbit);
|
||||
@@ -634,17 +646,6 @@ static int wm97xx_probe(struct device *dev)
|
||||
if (ret < 0)
|
||||
goto dev_alloc_err;
|
||||
|
||||
/* set up physical characteristics */
|
||||
wm->codec->phy_init(wm);
|
||||
|
||||
/* load gpio cache */
|
||||
wm->gpio[0] = wm97xx_reg_read(wm, AC97_GPIO_CFG);
|
||||
wm->gpio[1] = wm97xx_reg_read(wm, AC97_GPIO_POLARITY);
|
||||
wm->gpio[2] = wm97xx_reg_read(wm, AC97_GPIO_STICKY);
|
||||
wm->gpio[3] = wm97xx_reg_read(wm, AC97_GPIO_WAKEUP);
|
||||
wm->gpio[4] = wm97xx_reg_read(wm, AC97_GPIO_STATUS);
|
||||
wm->gpio[5] = wm97xx_reg_read(wm, AC97_MISC_AFE);
|
||||
|
||||
/* register our battery device */
|
||||
wm->battery_dev = platform_device_alloc("wm97xx-battery", -1);
|
||||
if (!wm->battery_dev) {
|
||||
@@ -801,7 +802,7 @@ void wm97xx_unregister_mach_ops(struct wm97xx *wm)
|
||||
EXPORT_SYMBOL_GPL(wm97xx_unregister_mach_ops);
|
||||
|
||||
static struct device_driver wm97xx_driver = {
|
||||
.name = "ac97",
|
||||
.name = "wm97xx-ts",
|
||||
.bus = &ac97_bus_type,
|
||||
.owner = THIS_MODULE,
|
||||
.probe = wm97xx_probe,
|
||||
|
||||
Reference in New Issue
Block a user