Lines Matching +full:spi +full:- +full:device
1 // SPDX-License-Identifier: GPL-2.0-only
10 #include <linux/mfd/sc27xx-pmic.h>
14 #include <linux/spi/spi.h>
36 struct device *dev;
53 * in the device data structure.
61 enum usb_charger_type sprd_pmic_detect_charger_type(struct device *dev) in sprd_pmic_detect_charger_type()
63 struct spi_device *spi = to_spi_device(dev); in sprd_pmic_detect_charger_type() local
64 struct sprd_pmic *ddata = spi_get_drvdata(spi); in sprd_pmic_detect_charger_type()
65 const struct sprd_pmic_data *pdata = ddata->pdata; in sprd_pmic_detect_charger_type()
70 ret = regmap_read_poll_timeout(ddata->regmap, pdata->charger_det, val, in sprd_pmic_detect_charger_type()
75 dev_err(&spi->dev, "failed to detect charger type\n"); in sprd_pmic_detect_charger_type()
100 struct device *dev = context; in sprd_pmic_spi_write()
101 struct spi_device *spi = to_spi_device(dev); in sprd_pmic_spi_write() local
103 return spi_write(spi, data, count); in sprd_pmic_spi_write()
110 struct device *dev = context; in sprd_pmic_spi_read()
111 struct spi_device *spi = to_spi_device(dev); in sprd_pmic_spi_read() local
117 return -EINVAL; in sprd_pmic_spi_read()
119 /* Copy address to read from into first element of SPI buffer. */ in sprd_pmic_spi_read()
121 ret = spi_read(spi, rx_buf, 1); in sprd_pmic_spi_read()
143 static int sprd_pmic_probe(struct spi_device *spi) in sprd_pmic_probe() argument
149 pdata = of_device_get_match_data(&spi->dev); in sprd_pmic_probe()
151 dev_err(&spi->dev, "No matching driver data found\n"); in sprd_pmic_probe()
152 return -EINVAL; in sprd_pmic_probe()
155 ddata = devm_kzalloc(&spi->dev, sizeof(*ddata), GFP_KERNEL); in sprd_pmic_probe()
157 return -ENOMEM; in sprd_pmic_probe()
159 ddata->regmap = devm_regmap_init(&spi->dev, &sprd_pmic_regmap, in sprd_pmic_probe()
160 &spi->dev, &sprd_pmic_config); in sprd_pmic_probe()
161 if (IS_ERR(ddata->regmap)) { in sprd_pmic_probe()
162 ret = PTR_ERR(ddata->regmap); in sprd_pmic_probe()
163 dev_err(&spi->dev, "Failed to allocate register map %d\n", ret); in sprd_pmic_probe()
167 spi_set_drvdata(spi, ddata); in sprd_pmic_probe()
168 ddata->dev = &spi->dev; in sprd_pmic_probe()
169 ddata->irq = spi->irq; in sprd_pmic_probe()
170 ddata->pdata = pdata; in sprd_pmic_probe()
172 ddata->irq_chip.name = dev_name(&spi->dev); in sprd_pmic_probe()
173 ddata->irq_chip.status_base = in sprd_pmic_probe()
174 pdata->irq_base + SPRD_PMIC_INT_MASK_STATUS; in sprd_pmic_probe()
175 ddata->irq_chip.mask_base = pdata->irq_base + SPRD_PMIC_INT_EN; in sprd_pmic_probe()
176 ddata->irq_chip.ack_base = 0; in sprd_pmic_probe()
177 ddata->irq_chip.num_regs = 1; in sprd_pmic_probe()
178 ddata->irq_chip.num_irqs = pdata->num_irqs; in sprd_pmic_probe()
179 ddata->irq_chip.mask_invert = true; in sprd_pmic_probe()
181 ddata->irqs = devm_kcalloc(&spi->dev, in sprd_pmic_probe()
182 pdata->num_irqs, sizeof(struct regmap_irq), in sprd_pmic_probe()
184 if (!ddata->irqs) in sprd_pmic_probe()
185 return -ENOMEM; in sprd_pmic_probe()
187 ddata->irq_chip.irqs = ddata->irqs; in sprd_pmic_probe()
188 for (i = 0; i < pdata->num_irqs; i++) in sprd_pmic_probe()
189 ddata->irqs[i].mask = BIT(i); in sprd_pmic_probe()
191 ret = devm_regmap_add_irq_chip(&spi->dev, ddata->regmap, ddata->irq, in sprd_pmic_probe()
193 &ddata->irq_chip, &ddata->irq_data); in sprd_pmic_probe()
195 dev_err(&spi->dev, "Failed to add PMIC irq chip %d\n", ret); in sprd_pmic_probe()
199 ret = devm_of_platform_populate(&spi->dev); in sprd_pmic_probe()
201 dev_err(&spi->dev, "Failed to populate sub-devices %d\n", ret); in sprd_pmic_probe()
205 device_init_wakeup(&spi->dev, true); in sprd_pmic_probe()
210 static int sprd_pmic_suspend(struct device *dev) in sprd_pmic_suspend()
215 enable_irq_wake(ddata->irq); in sprd_pmic_suspend()
220 static int sprd_pmic_resume(struct device *dev) in sprd_pmic_resume()
225 disable_irq_wake(ddata->irq); in sprd_pmic_resume()
241 .name = "sc27xx-pmic",