Lines Matching refs:data

74 #define CMA3000_READ(data, reg, msg) \  argument
75 (data->bus_ops->read(data->dev, reg, msg))
76 #define CMA3000_SET(data, reg, val, msg) \ argument
77 ((data)->bus_ops->write(data->dev, reg, val, msg))
96 static void decode_mg(struct cma3000_accl_data *data, int *datax, in decode_mg() argument
100 *datax = ((s8)*datax) * data->bit_to_mg; in decode_mg()
101 *datay = ((s8)*datay) * data->bit_to_mg; in decode_mg()
102 *dataz = ((s8)*dataz) * data->bit_to_mg; in decode_mg()
107 struct cma3000_accl_data *data = dev_id; in cma3000_thread_irq() local
111 intr_status = CMA3000_READ(data, CMA3000_INTSTATUS, "interrupt status"); in cma3000_thread_irq()
117 input_report_abs(data->input_dev, ABS_MISC, 1); in cma3000_thread_irq()
118 input_sync(data->input_dev); in cma3000_thread_irq()
120 input_report_abs(data->input_dev, ABS_MISC, 0); in cma3000_thread_irq()
123 datax = CMA3000_READ(data, CMA3000_DOUTX, "X"); in cma3000_thread_irq()
124 datay = CMA3000_READ(data, CMA3000_DOUTY, "Y"); in cma3000_thread_irq()
125 dataz = CMA3000_READ(data, CMA3000_DOUTZ, "Z"); in cma3000_thread_irq()
127 ctrl = CMA3000_READ(data, CMA3000_CTRL, "ctrl"); in cma3000_thread_irq()
131 data->bit_to_mg = mode_to_mg[mode][range]; in cma3000_thread_irq()
134 if (data->bit_to_mg == 0) in cma3000_thread_irq()
138 decode_mg(data, &datax, &datay, &dataz); in cma3000_thread_irq()
140 input_report_abs(data->input_dev, ABS_X, datax); in cma3000_thread_irq()
141 input_report_abs(data->input_dev, ABS_Y, datay); in cma3000_thread_irq()
142 input_report_abs(data->input_dev, ABS_Z, dataz); in cma3000_thread_irq()
143 input_sync(data->input_dev); in cma3000_thread_irq()
148 static int cma3000_reset(struct cma3000_accl_data *data) in cma3000_reset() argument
153 CMA3000_SET(data, CMA3000_RSTR, 0x02, "Reset"); in cma3000_reset()
154 CMA3000_SET(data, CMA3000_RSTR, 0x0A, "Reset"); in cma3000_reset()
155 CMA3000_SET(data, CMA3000_RSTR, 0x04, "Reset"); in cma3000_reset()
160 val = CMA3000_READ(data, CMA3000_STATUS, "Status"); in cma3000_reset()
162 dev_err(data->dev, "Reset failed\n"); in cma3000_reset()
167 dev_err(data->dev, "Parity Error\n"); in cma3000_reset()
174 static int cma3000_poweron(struct cma3000_accl_data *data) in cma3000_poweron() argument
176 const struct cma3000_platform_data *pdata = data->pdata; in cma3000_poweron()
180 if (data->g_range == CMARANGE_2G) { in cma3000_poweron()
181 ctrl = (data->mode << 1) | CMA3000_RANGE2G; in cma3000_poweron()
182 } else if (data->g_range == CMARANGE_8G) { in cma3000_poweron()
183 ctrl = (data->mode << 1) | CMA3000_RANGE8G; in cma3000_poweron()
185 dev_info(data->dev, in cma3000_poweron()
187 ctrl = (data->mode << 1) | CMA3000_RANGE8G; in cma3000_poweron()
190 ctrl |= data->bus_ops->ctrl_mod; in cma3000_poweron()
192 CMA3000_SET(data, CMA3000_MDTHR, pdata->mdthr, in cma3000_poweron()
194 CMA3000_SET(data, CMA3000_MDFFTMR, pdata->mdfftmr, in cma3000_poweron()
196 CMA3000_SET(data, CMA3000_FFTHR, pdata->ffthr, in cma3000_poweron()
198 ret = CMA3000_SET(data, CMA3000_CTRL, ctrl, "Mode setting"); in cma3000_poweron()
207 static int cma3000_poweroff(struct cma3000_accl_data *data) in cma3000_poweroff() argument
211 ret = CMA3000_SET(data, CMA3000_CTRL, CMAMODE_POFF, "Mode setting"); in cma3000_poweroff()
219 struct cma3000_accl_data *data = input_get_drvdata(input_dev); in cma3000_open() local
221 guard(mutex)(&data->mutex); in cma3000_open()
223 if (!data->suspended) in cma3000_open()
224 cma3000_poweron(data); in cma3000_open()
226 data->opened = true; in cma3000_open()
233 struct cma3000_accl_data *data = input_get_drvdata(input_dev); in cma3000_close() local
235 guard(mutex)(&data->mutex); in cma3000_close()
237 if (!data->suspended) in cma3000_close()
238 cma3000_poweroff(data); in cma3000_close()
240 data->opened = false; in cma3000_close()
243 void cma3000_suspend(struct cma3000_accl_data *data) in cma3000_suspend() argument
245 guard(mutex)(&data->mutex); in cma3000_suspend()
247 if (!data->suspended && data->opened) in cma3000_suspend()
248 cma3000_poweroff(data); in cma3000_suspend()
250 data->suspended = true; in cma3000_suspend()
255 void cma3000_resume(struct cma3000_accl_data *data) in cma3000_resume() argument
257 guard(mutex)(&data->mutex); in cma3000_resume()
259 if (data->suspended && data->opened) in cma3000_resume()
260 cma3000_poweron(data); in cma3000_resume()
262 data->suspended = false; in cma3000_resume()
270 struct cma3000_accl_data *data; in cma3000_init() local
288 data = kzalloc(sizeof(*data), GFP_KERNEL); in cma3000_init()
290 if (!data || !input_dev) { in cma3000_init()
295 data->dev = dev; in cma3000_init()
296 data->input_dev = input_dev; in cma3000_init()
297 data->bus_ops = bops; in cma3000_init()
298 data->pdata = pdata; in cma3000_init()
299 data->irq = irq; in cma3000_init()
300 mutex_init(&data->mutex); in cma3000_init()
302 data->mode = pdata->mode; in cma3000_init()
303 if (data->mode > CMAMODE_POFF) { in cma3000_init()
304 data->mode = CMAMODE_MOTDET; in cma3000_init()
309 data->g_range = pdata->g_range; in cma3000_init()
310 if (data->g_range != CMARANGE_2G && data->g_range != CMARANGE_8G) { in cma3000_init()
313 data->g_range = CMARANGE_8G; in cma3000_init()
322 -data->g_range, data->g_range, pdata->fuzz_x, 0); in cma3000_init()
324 -data->g_range, data->g_range, pdata->fuzz_y, 0); in cma3000_init()
326 -data->g_range, data->g_range, pdata->fuzz_z, 0); in cma3000_init()
329 input_set_drvdata(input_dev, data); in cma3000_init()
331 error = cma3000_reset(data); in cma3000_init()
335 rev = CMA3000_READ(data, CMA3000_REVID, "Revid"); in cma3000_init()
345 "cma3000_d0x", data); in cma3000_init()
351 error = input_register_device(data->input_dev); in cma3000_init()
357 return data; in cma3000_init()
360 free_irq(irq, data); in cma3000_init()
363 kfree(data); in cma3000_init()
369 void cma3000_exit(struct cma3000_accl_data *data) in cma3000_exit() argument
371 free_irq(data->irq, data); in cma3000_exit()
372 input_unregister_device(data->input_dev); in cma3000_exit()
373 kfree(data); in cma3000_exit()