summaryrefslogtreecommitdiff
path: root/arch/arm/mach-sa1100/ipaq-sleeve-dual.c
diff options
context:
space:
mode:
Diffstat (limited to 'arch/arm/mach-sa1100/ipaq-sleeve-dual.c')
-rw-r--r--arch/arm/mach-sa1100/ipaq-sleeve-dual.c68
1 files changed, 68 insertions, 0 deletions
diff --git a/arch/arm/mach-sa1100/ipaq-sleeve-dual.c b/arch/arm/mach-sa1100/ipaq-sleeve-dual.c
new file mode 100644
index 000000000000..dd4c3f756885
--- /dev/null
+++ b/arch/arm/mach-sa1100/ipaq-sleeve-dual.c
@@ -0,0 +1,68 @@
+#include <linux/ipaq-sleeve.h>
+#include <linux/module.h>
+#include <linux/platform_device.h>
+#include <linux/slab.h>
+
+struct ipaq_sleeve_dual_data {
+ struct platform_device *skt;
+};
+
+static int ipaq_sleeve_dual_probe(struct device *dev)
+{
+ struct ipaq_option_device *idev = to_ipaq_option_device(dev);
+ struct ipaq_sleeve_dual_data *cf;
+ struct platform_device_info pinfo = {
+ .parent = dev,
+ .name = "sa11x0-pcmcia",
+ .id = -1,
+ };
+
+ cf = devm_kzalloc(dev, sizeof(*cf), GFP_KERNEL);
+ if (!cf)
+ return -ENOMEM;
+
+ pinfo.data = &idev->id;
+ pinfo.size_data = sizeof(idev->id);
+
+ cf->skt = platform_device_register_full(&pinfo);
+ if (IS_ERR(cf->skt)) {
+ dev_err(dev, "unable to register pcmcia device: %ld\n",
+ PTR_ERR(cf->skt));
+ return PTR_ERR(cf->skt);
+ }
+
+ dev_set_drvdata(dev, cf);
+
+ return 0;
+}
+
+static int ipaq_sleeve_dual_remove(struct device *dev)
+{
+ struct ipaq_sleeve_dual_data *cf = dev_get_drvdata(dev);
+
+ platform_device_unregister(cf->skt);
+
+ return 0;
+}
+
+static const struct ipaq_option_id ipaq_sleeve_dual_ids[] = {
+ { /* Compaq dual PCMCIA sleeve */
+ .vendor = 0x1125,
+ .device = 0x0001,
+ }, { },
+};
+
+static struct ipaq_option_driver ipaq_sleeve_dual = {
+ .id_table = ipaq_sleeve_dual_ids,
+ .driver = {
+ .name = "ipaq-sleeve-dual",
+ .probe = ipaq_sleeve_dual_probe,
+ .remove = ipaq_sleeve_dual_remove,
+ },
+};
+
+module_driver(ipaq_sleeve_dual, ipaq_option_driver_register,
+ ipaq_option_driver_unregister);
+
+MODULE_LICENSE("GPL");
+MODULE_DEVICE_TABLE(ipaq, ipaq_sleeve_dual_ids);