#include #include #include #include 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);