Lines Matching refs:cpcap

19 #include <linux/mfd/motorola-cpcap.h>
61 static int cpcap_check_revision(struct cpcap_ddata *cpcap)
66 ret = cpcap_get_vendor(&cpcap->spi->dev, cpcap->regmap, &vendor);
70 ret = cpcap_get_revision(&cpcap->spi->dev, cpcap->regmap, &rev);
74 dev_info(&cpcap->spi->dev, "CPCAP vendor: %s rev: %i.%i (%x)\n",
80 dev_info(&cpcap->spi->dev,
94 .name = "cpcap-m2",
103 .name = "cpcap-m2",
122 static void cpcap_init_one_regmap_irq(struct cpcap_ddata *cpcap,
130 reg_offset /= cpcap->regmap_conf->val_bits;
131 reg_offset *= cpcap->regmap_conf->reg_stride;
133 bit = irq % cpcap->regmap_conf->val_bits;
140 static int cpcap_init_irq_chip(struct cpcap_ddata *cpcap, int irq_chip,
147 struct regmap_irq *rirq = &cpcap->irqs[i];
149 cpcap_init_one_regmap_irq(cpcap, rirq, irq_start, i);
151 chip->irqs = &cpcap->irqs[irq_start];
153 chip->irq_drv_data = cpcap;
155 ret = devm_regmap_add_irq_chip(&cpcap->spi->dev, cpcap->regmap,
156 cpcap->spi->irq,
157 irq_get_trigger_type(cpcap->spi->irq) |
159 chip, &cpcap->irqdata[irq_chip]);
161 dev_err(&cpcap->spi->dev, "could not add irq chip %i: %i\n",
169 static int cpcap_init_irq(struct cpcap_ddata *cpcap)
173 cpcap->irqs = devm_kzalloc(&cpcap->spi->dev,
174 array3_size(sizeof(*cpcap->irqs),
176 cpcap->regmap_conf->val_bits),
178 if (!cpcap->irqs)
181 ret = cpcap_init_irq_chip(cpcap, 0, 0, 16);
185 ret = cpcap_init_irq_chip(cpcap, 1, 16, 16);
189 ret = cpcap_init_irq_chip(cpcap, 2, 32, 64);
193 enable_irq_wake(cpcap->spi->irq);
199 { .compatible = "motorola,cpcap", },
206 { .name = "cpcap", },
247 .of_compatible = "motorola,mapphone-cpcap-adc",
250 .of_compatible = "motorola,cpcap-battery",
252 .name = "cpcap-charger",
253 .of_compatible = "motorola,mapphone-cpcap-charger",
255 .name = "cpcap-regulator",
256 .of_compatible = "motorola,mapphone-cpcap-regulator",
258 .name = "cpcap-rtc",
259 .of_compatible = "motorola,cpcap-rtc",
261 .name = "cpcap-pwrbutton",
262 .of_compatible = "motorola,cpcap-pwrbutton",
264 .name = "cpcap-usb-phy",
265 .of_compatible = "motorola,mapphone-cpcap-usb-phy",
267 .name = "cpcap-led",
269 .of_compatible = "motorola,cpcap-led-red",
271 .name = "cpcap-led",
273 .of_compatible = "motorola,cpcap-led-green",
275 .name = "cpcap-led",
277 .of_compatible = "motorola,cpcap-led-blue",
279 .name = "cpcap-led",
281 .of_compatible = "motorola,cpcap-led-adl",
283 .name = "cpcap-led",
285 .of_compatible = "motorola,cpcap-led-cp",
287 .name = "cpcap-codec",
293 struct cpcap_ddata *cpcap;
296 cpcap = devm_kzalloc(&spi->dev, sizeof(*cpcap), GFP_KERNEL);
297 if (!cpcap)
300 cpcap->spi = spi;
301 spi_set_drvdata(spi, cpcap);
310 cpcap->regmap_conf = &cpcap_regmap_config;
311 cpcap->regmap = devm_regmap_init_spi(spi, &cpcap_regmap_config);
312 if (IS_ERR(cpcap->regmap)) {
313 ret = PTR_ERR(cpcap->regmap);
314 dev_err(&cpcap->spi->dev, "Failed to initialize regmap: %d\n",
320 ret = cpcap_check_revision(cpcap);
322 dev_err(&cpcap->spi->dev, "Failed to detect CPCAP: %i\n", ret);
326 ret = cpcap_init_irq(cpcap);
340 .name = "cpcap-core",
349 MODULE_ALIAS("platform:cpcap");