mfd: Don't allow wm831x to be built as a module
[safe/jmp/linux-2.6] / drivers / mfd / ezx-pcap.c
index 732664f..df405af 100644 (file)
@@ -107,6 +107,29 @@ int ezx_pcap_read(struct pcap_chip *pcap, u8 reg_num, u32 *value)
 }
 EXPORT_SYMBOL_GPL(ezx_pcap_read);
 
+int ezx_pcap_set_bits(struct pcap_chip *pcap, u8 reg_num, u32 mask, u32 val)
+{
+       int ret;
+       u32 tmp = PCAP_REGISTER_READ_OP_BIT |
+               (reg_num << PCAP_REGISTER_ADDRESS_SHIFT);
+
+       mutex_lock(&pcap->io_mutex);
+       ret = ezx_pcap_putget(pcap, &tmp);
+       if (ret)
+               goto out_unlock;
+
+       tmp &= (PCAP_REGISTER_VALUE_MASK & ~mask);
+       tmp |= (val & mask) | PCAP_REGISTER_WRITE_OP_BIT |
+               (reg_num << PCAP_REGISTER_ADDRESS_SHIFT);
+
+       ret = ezx_pcap_putget(pcap, &tmp);
+out_unlock:
+       mutex_unlock(&pcap->io_mutex);
+
+       return ret;
+}
+EXPORT_SYMBOL_GPL(ezx_pcap_set_bits);
+
 /* IRQ */
 int irq_to_pcap(struct pcap_chip *pcap, int irq)
 {
@@ -364,7 +387,6 @@ static int __devinit pcap_add_subdev(struct pcap_chip *pcap,
        pdev = platform_device_alloc(subdev->name, subdev->id);
        pdev->dev.parent = &pcap->spi->dev;
        pdev->dev.platform_data = subdev->platform_data;
-       platform_set_drvdata(pdev, pcap);
 
        return platform_device_add(pdev);
 }
@@ -519,9 +541,10 @@ static void __exit ezx_pcap_exit(void)
        spi_unregister_driver(&ezxpcap_driver);
 }
 
-module_init(ezx_pcap_init);
+subsys_initcall(ezx_pcap_init);
 module_exit(ezx_pcap_exit);
 
 MODULE_LICENSE("GPL");
 MODULE_AUTHOR("Daniel Ribeiro / Harald Welte");
 MODULE_DESCRIPTION("Motorola PCAP2 ASIC Driver");
+MODULE_ALIAS("spi:ezx-pcap");