Blame view
drivers/mfd/mc13xxx-i2c.c
2.76 KB
df3df6469 mfd: Add mc13xxx ... |
1 2 3 4 5 6 7 8 9 10 11 12 |
/* * Copyright 2009-2010 Creative Product Design * Marc Reilly marc@cpdesign.com.au * * This program is free software; you can redistribute it and/or modify it under * the terms of the GNU General Public License version 2 as published by the * Free Software Foundation. */ #include <linux/slab.h> #include <linux/module.h> #include <linux/platform_device.h> |
df3df6469 mfd: Add mc13xxx ... |
13 14 15 16 17 18 19 20 21 22 23 24 25 |
#include <linux/mfd/core.h> #include <linux/mfd/mc13xxx.h> #include <linux/of.h> #include <linux/of_device.h> #include <linux/of_gpio.h> #include <linux/i2c.h> #include <linux/err.h> #include "mc13xxx.h" static const struct i2c_device_id mc13xxx_i2c_device_id[] = { { .name = "mc13892", |
cd0f34b08 mfd: mc13xxx: Cha... |
26 |
.driver_data = (kernel_ulong_t)&mc13xxx_variant_mc13892, |
df3df6469 mfd: Add mc13xxx ... |
27 |
}, { |
0312e024d mfd: mc13xxx: Add... |
28 29 |
.name = "mc34708", .driver_data = (kernel_ulong_t)&mc13xxx_variant_mc34708, |
df3df6469 mfd: Add mc13xxx ... |
30 31 32 33 34 35 36 37 38 |
}, { /* sentinel */ } }; MODULE_DEVICE_TABLE(i2c, mc13xxx_i2c_device_id); static const struct of_device_id mc13xxx_dt_ids[] = { { .compatible = "fsl,mc13892", |
cd0f34b08 mfd: mc13xxx: Cha... |
39 |
.data = &mc13xxx_variant_mc13892, |
df3df6469 mfd: Add mc13xxx ... |
40 |
}, { |
0312e024d mfd: mc13xxx: Add... |
41 42 |
.compatible = "fsl,mc34708", .data = &mc13xxx_variant_mc34708, |
df3df6469 mfd: Add mc13xxx ... |
43 44 45 46 47 |
}, { /* sentinel */ } }; MODULE_DEVICE_TABLE(of, mc13xxx_dt_ids); |
18dd21ab1 mfd: mc13xxx: i2c... |
48 |
static const struct regmap_config mc13xxx_regmap_i2c_config = { |
df3df6469 mfd: Add mc13xxx ... |
49 50 51 52 53 54 55 56 57 58 59 |
.reg_bits = 8, .val_bits = 24, .max_register = MC13XXX_NUMREGS, .cache_type = REGCACHE_NONE, }; static int mc13xxx_i2c_probe(struct i2c_client *client, const struct i2c_device_id *id) { |
df3df6469 mfd: Add mc13xxx ... |
60 |
struct mc13xxx *mc13xxx; |
df3df6469 mfd: Add mc13xxx ... |
61 |
int ret; |
e7c706b1e mfd: Use devm_* A... |
62 |
mc13xxx = devm_kzalloc(&client->dev, sizeof(*mc13xxx), GFP_KERNEL); |
df3df6469 mfd: Add mc13xxx ... |
63 64 65 66 |
if (!mc13xxx) return -ENOMEM; dev_set_drvdata(&client->dev, mc13xxx); |
db9ef449a mfd: mc13xxx: Sim... |
67 |
mc13xxx->irq = client->irq; |
df3df6469 mfd: Add mc13xxx ... |
68 |
|
e7c706b1e mfd: Use devm_* A... |
69 70 |
mc13xxx->regmap = devm_regmap_init_i2c(client, &mc13xxx_regmap_i2c_config); |
df3df6469 mfd: Add mc13xxx ... |
71 72 |
if (IS_ERR(mc13xxx->regmap)) { ret = PTR_ERR(mc13xxx->regmap); |
db9ef449a mfd: mc13xxx: Sim... |
73 74 |
dev_err(&client->dev, "Failed to initialize regmap: %d ", ret); |
df3df6469 mfd: Add mc13xxx ... |
75 76 |
return ret; } |
cd0f34b08 mfd: mc13xxx: Cha... |
77 78 79 80 81 82 83 |
if (client->dev.of_node) { const struct of_device_id *of_id = of_match_device(mc13xxx_dt_ids, &client->dev); mc13xxx->variant = of_id->data; } else { mc13xxx->variant = (void *)id->driver_data; } |
df3df6469 mfd: Add mc13xxx ... |
84 |
|
db9ef449a mfd: mc13xxx: Sim... |
85 |
return mc13xxx_common_init(&client->dev); |
df3df6469 mfd: Add mc13xxx ... |
86 |
} |
4740f73fe mfd: remove use o... |
87 |
static int mc13xxx_i2c_remove(struct i2c_client *client) |
df3df6469 mfd: Add mc13xxx ... |
88 |
{ |
db9ef449a mfd: mc13xxx: Sim... |
89 |
return mc13xxx_common_exit(&client->dev); |
df3df6469 mfd: Add mc13xxx ... |
90 91 92 93 94 |
} static struct i2c_driver mc13xxx_i2c_driver = { .id_table = mc13xxx_i2c_device_id, .driver = { |
df3df6469 mfd: Add mc13xxx ... |
95 96 97 98 |
.name = "mc13xxx", .of_match_table = mc13xxx_dt_ids, }, .probe = mc13xxx_i2c_probe, |
84449216b mfd: remove use o... |
99 |
.remove = mc13xxx_i2c_remove, |
df3df6469 mfd: Add mc13xxx ... |
100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 |
}; static int __init mc13xxx_i2c_init(void) { return i2c_add_driver(&mc13xxx_i2c_driver); } subsys_initcall(mc13xxx_i2c_init); static void __exit mc13xxx_i2c_exit(void) { i2c_del_driver(&mc13xxx_i2c_driver); } module_exit(mc13xxx_i2c_exit); MODULE_DESCRIPTION("i2c driver for Freescale MC13XXX PMIC"); MODULE_AUTHOR("Marc Reilly <marc@cpdesign.com.au"); MODULE_LICENSE("GPL v2"); |