Lines Matching defs:wm831x

3  * wm831x-auxadc.c  --  AUXADC for Wolfson WM831x PMICs
17 #include <linux/mfd/wm831x/core.h>
18 #include <linux/mfd/wm831x/pdata.h>
19 #include <linux/mfd/wm831x/irq.h>
20 #include <linux/mfd/wm831x/auxadc.h>
21 #include <linux/mfd/wm831x/otp.h>
22 #include <linux/mfd/wm831x/regulator.h>
31 static int wm831x_auxadc_read_irq(struct wm831x *wm831x,
46 mutex_lock(&wm831x->auxadc_lock);
49 list_add(&req->list, &wm831x->auxadc_pending);
51 ena = !wm831x->auxadc_active;
54 ret = wm831x_set_bits(wm831x, WM831X_AUXADC_CONTROL,
57 dev_err(wm831x->dev, "Failed to enable AUXADC: %d\n",
64 if (!(wm831x->auxadc_active & (1 << input))) {
65 ret = wm831x_set_bits(wm831x, WM831X_AUXADC_SOURCE,
68 dev_err(wm831x->dev,
73 wm831x->auxadc_active |= 1 << input;
78 ret = wm831x_set_bits(wm831x, WM831X_AUXADC_CONTROL,
84 dev_err(wm831x->dev, "Failed to start AUXADC: %d\n",
90 mutex_unlock(&wm831x->auxadc_lock);
95 mutex_lock(&wm831x->auxadc_lock);
100 mutex_unlock(&wm831x->auxadc_lock);
109 struct wm831x *wm831x = irq_data;
113 ret = wm831x_reg_read(wm831x, WM831X_AUXADC_DATA);
115 dev_err(wm831x->dev,
128 mutex_lock(&wm831x->auxadc_lock);
131 wm831x_set_bits(wm831x, WM831X_AUXADC_SOURCE,
133 wm831x->auxadc_active &= ~(1 << input);
136 if (!wm831x->auxadc_active)
137 wm831x_reg_write(wm831x, WM831X_AUXADC_CONTROL, 0);
140 list_for_each_entry(req, &wm831x->auxadc_pending, list) {
147 mutex_unlock(&wm831x->auxadc_lock);
152 static int wm831x_auxadc_read_polled(struct wm831x *wm831x,
157 mutex_lock(&wm831x->auxadc_lock);
159 ret = wm831x_set_bits(wm831x, WM831X_AUXADC_CONTROL,
162 dev_err(wm831x->dev, "Failed to enable AUXADC: %d\n", ret);
168 ret = wm831x_reg_write(wm831x, WM831X_AUXADC_SOURCE,
171 dev_err(wm831x->dev, "Failed to set AUXADC source: %d\n", ret);
175 ret = wm831x_set_bits(wm831x, WM831X_AUXADC_CONTROL,
178 dev_err(wm831x->dev, "Failed to start AUXADC: %d\n", ret);
188 ret = wm831x_reg_read(wm831x,
191 dev_err(wm831x->dev,
198 wm831x_reg_write(wm831x,
203 dev_err(wm831x->dev,
210 ret = wm831x_reg_read(wm831x, WM831X_AUXADC_DATA);
212 dev_err(wm831x->dev,
224 dev_err(wm831x->dev, "Data from source %d not %d\n",
232 wm831x_set_bits(wm831x, WM831X_AUXADC_CONTROL, WM831X_AUX_ENA, 0);
234 mutex_unlock(&wm831x->auxadc_lock);
241 * @wm831x: Device to read from.
244 int wm831x_auxadc_read(struct wm831x *wm831x, enum wm831x_auxadc input)
246 return wm831x->auxadc_read(wm831x, input);
253 * @wm831x: Device to read from.
256 int wm831x_auxadc_read_uv(struct wm831x *wm831x, enum wm831x_auxadc input)
260 ret = wm831x_auxadc_read(wm831x, input);
270 void wm831x_auxadc_init(struct wm831x *wm831x)
274 mutex_init(&wm831x->auxadc_lock);
275 INIT_LIST_HEAD(&wm831x->auxadc_pending);
277 if (wm831x->irq) {
278 wm831x->auxadc_read = wm831x_auxadc_read_irq;
280 ret = request_threaded_irq(wm831x_irq(wm831x,
284 "auxadc", wm831x);
286 dev_err(wm831x->dev, "AUXADC IRQ request failed: %d\n",
288 wm831x->auxadc_read = NULL;
292 if (!wm831x->auxadc_read)
293 wm831x->auxadc_read = wm831x_auxadc_read_polled;