Lines Matching refs:lm

174 static int lm8323_write(struct lm8323_chip *lm, int len, ...)  in lm8323_write()  argument
183 dev_err(&lm->client->dev, "tried to send %d bytes\n", len); in lm8323_write()
197 ret = i2c_master_send(lm->client, data, len); in lm8323_write()
199 ret = i2c_master_send(lm->client, data, len); in lm8323_write()
201 dev_err(&lm->client->dev, "sent %d bytes of %d total\n", in lm8323_write()
211 static int lm8323_read(struct lm8323_chip *lm, u8 cmd, u8 *buf, int len) in lm8323_read() argument
219 ret = i2c_master_send(lm->client, &cmd, 1); in lm8323_read()
221 ret = i2c_master_send(lm->client, &cmd, 1); in lm8323_read()
223 dev_err(&lm->client->dev, "sending read cmd 0x%02x failed\n", in lm8323_read()
228 ret = i2c_master_recv(lm->client, buf, len); in lm8323_read()
230 dev_err(&lm->client->dev, "wanted %d bytes, got %d\n", in lm8323_read()
239 static void lm8323_set_active_time(struct lm8323_chip *lm, int time) in lm8323_set_active_time() argument
241 lm8323_write(lm, 2, LM8323_CMD_SET_ACTIVE, time >> 2); in lm8323_set_active_time()
258 static void process_keys(struct lm8323_chip *lm) in process_keys() argument
262 int old_keys_down = lm->keys_down; in process_keys()
270 ret = lm8323_read(lm, LM8323_CMD_READ_FIFO, key_fifo, LM8323_FIFO_LEN); in process_keys()
273 dev_err(&lm->client->dev, "Failed reading fifo \n"); in process_keys()
281 unsigned short keycode = lm->keymap[key]; in process_keys()
283 dev_vdbg(&lm->client->dev, "key 0x%02x %s\n", in process_keys()
286 if (lm->kp_enabled) { in process_keys()
287 input_event(lm->idev, EV_MSC, MSC_SCAN, key); in process_keys()
288 input_report_key(lm->idev, keycode, isdown); in process_keys()
289 input_sync(lm->idev); in process_keys()
293 lm->keys_down++; in process_keys()
295 lm->keys_down--; in process_keys()
303 if (!old_keys_down && lm->keys_down) in process_keys()
304 lm8323_set_active_time(lm, 0); in process_keys()
305 if (old_keys_down && !lm->keys_down) in process_keys()
306 lm8323_set_active_time(lm, lm->active_time); in process_keys()
309 static void lm8323_process_error(struct lm8323_chip *lm) in lm8323_process_error() argument
313 if (lm8323_read(lm, LM8323_CMD_READ_ERR, &error, 1) == 1) { in lm8323_process_error()
315 dev_vdbg(&lm->client->dev, "fifo overflow!\n"); in lm8323_process_error()
317 dev_vdbg(&lm->client->dev, in lm8323_process_error()
320 dev_vdbg(&lm->client->dev, in lm8323_process_error()
323 dev_vdbg(&lm->client->dev, "bad command parameter\n"); in lm8323_process_error()
327 static void lm8323_reset(struct lm8323_chip *lm) in lm8323_reset() argument
330 lm8323_write(lm, 2, LM8323_CMD_RESET, 0xAA); in lm8323_reset()
333 static int lm8323_configure(struct lm8323_chip *lm) in lm8323_configure() argument
335 int keysize = (lm->size_x << 4) | lm->size_y; in lm8323_configure()
337 int debounce = lm->debounce_time >> 2; in lm8323_configure()
338 int active = lm->active_time >> 2; in lm8323_configure()
347 lm8323_write(lm, 2, LM8323_CMD_WRITE_CFG, 0); in lm8323_configure()
348 lm8323_write(lm, 2, LM8323_CMD_WRITE_CLOCK, clock); in lm8323_configure()
349 lm8323_write(lm, 2, LM8323_CMD_SET_KEY_SIZE, keysize); in lm8323_configure()
350 lm8323_set_active_time(lm, lm->active_time); in lm8323_configure()
351 lm8323_write(lm, 2, LM8323_CMD_SET_DEBOUNCE, debounce); in lm8323_configure()
352 lm8323_write(lm, 3, LM8323_CMD_WRITE_PORT_STATE, 0xff, 0xff); in lm8323_configure()
353 lm8323_write(lm, 3, LM8323_CMD_WRITE_PORT_SEL, 0, 0); in lm8323_configure()
378 struct lm8323_chip *lm = _lm; in lm8323_irq() local
382 mutex_lock(&lm->lock); in lm8323_irq()
384 while ((lm8323_read(lm, LM8323_CMD_READ_INT, &ints, 1) == 1) && ints) { in lm8323_irq()
386 process_keys(lm); in lm8323_irq()
389 dev_vdbg(&lm->client->dev, "rotator fired\n"); in lm8323_irq()
392 dev_vdbg(&lm->client->dev, "error!\n"); in lm8323_irq()
393 lm8323_process_error(lm); in lm8323_irq()
396 dev_err(&lm->client->dev, "chip lost config; " in lm8323_irq()
398 lm8323_configure(lm); in lm8323_irq()
402 dev_vdbg(&lm->client->dev, in lm8323_irq()
404 pwm_done(&lm->pwm[i]); in lm8323_irq()
409 mutex_unlock(&lm->lock); in lm8323_irq()
417 static int lm8323_read_id(struct lm8323_chip *lm, u8 *buf) in lm8323_read_id() argument
421 bytes = lm8323_read(lm, LM8323_CMD_READ_ID, buf, 2); in lm8323_read_id()
513 struct lm8323_chip *lm = pwm->chip; in lm8323_pwm_set_brightness() local
525 mutex_lock(&lm->lock); in lm8323_pwm_set_brightness()
526 if (likely(!lm->pm_suspend)) in lm8323_pwm_set_brightness()
530 mutex_unlock(&lm->lock); in lm8323_pwm_set_brightness()
567 static int init_pwm(struct lm8323_chip *lm, int id, struct device *dev, in init_pwm() argument
574 pwm = &lm->pwm[id - 1]; in init_pwm()
584 pwm->chip = lm; in init_pwm()
605 struct lm8323_chip *lm = dev_get_drvdata(dev); in lm8323_show_disable() local
607 return sprintf(buf, "%u\n", !lm->kp_enabled); in lm8323_show_disable()
614 struct lm8323_chip *lm = dev_get_drvdata(dev); in lm8323_set_disable() local
622 mutex_lock(&lm->lock); in lm8323_set_disable()
623 lm->kp_enabled = !i; in lm8323_set_disable()
624 mutex_unlock(&lm->lock); in lm8323_set_disable()
635 struct lm8323_chip *lm; in lm8323_probe() local
658 lm = kzalloc(sizeof *lm, GFP_KERNEL); in lm8323_probe()
660 if (!lm || !idev) { in lm8323_probe()
665 lm->client = client; in lm8323_probe()
666 lm->idev = idev; in lm8323_probe()
667 mutex_init(&lm->lock); in lm8323_probe()
669 lm->size_x = pdata->size_x; in lm8323_probe()
670 lm->size_y = pdata->size_y; in lm8323_probe()
672 lm->size_x, lm->size_y); in lm8323_probe()
674 lm->debounce_time = pdata->debounce_time; in lm8323_probe()
675 lm->active_time = pdata->active_time; in lm8323_probe()
677 lm8323_reset(lm); in lm8323_probe()
682 while (lm8323_read(lm, LM8323_CMD_READ_INT, data, 1) == 1) { in lm8323_probe()
695 lm8323_configure(lm); in lm8323_probe()
698 if (lm8323_read_id(lm, data) != 0) { in lm8323_probe()
705 err = init_pwm(lm, pwm + 1, &client->dev, in lm8323_probe()
711 lm->kp_enabled = true; in lm8323_probe()
717 snprintf(lm->phys, sizeof(lm->phys), in lm8323_probe()
719 idev->phys = lm->phys; in lm8323_probe()
725 lm->keymap[i] = pdata->keymap[i]; in lm8323_probe()
739 IRQF_TRIGGER_LOW|IRQF_ONESHOT, "lm8323", lm); in lm8323_probe()
745 i2c_set_clientdata(client, lm); in lm8323_probe()
759 if (lm->pwm[pwm].enabled) in lm8323_probe()
760 led_classdev_unregister(&lm->pwm[pwm].cdev); in lm8323_probe()
763 kfree(lm); in lm8323_probe()
769 struct lm8323_chip *lm = i2c_get_clientdata(client); in lm8323_remove() local
773 free_irq(client->irq, lm); in lm8323_remove()
775 input_unregister_device(lm->idev); in lm8323_remove()
777 device_remove_file(&lm->client->dev, &dev_attr_disable_kp); in lm8323_remove()
780 if (lm->pwm[i].enabled) in lm8323_remove()
781 led_classdev_unregister(&lm->pwm[i].cdev); in lm8323_remove()
783 kfree(lm); in lm8323_remove()
796 struct lm8323_chip *lm = i2c_get_clientdata(client); in lm8323_suspend() local
802 mutex_lock(&lm->lock); in lm8323_suspend()
803 lm->pm_suspend = true; in lm8323_suspend()
804 mutex_unlock(&lm->lock); in lm8323_suspend()
807 if (lm->pwm[i].enabled) in lm8323_suspend()
808 led_classdev_suspend(&lm->pwm[i].cdev); in lm8323_suspend()
816 struct lm8323_chip *lm = i2c_get_clientdata(client); in lm8323_resume() local
819 mutex_lock(&lm->lock); in lm8323_resume()
820 lm->pm_suspend = false; in lm8323_resume()
821 mutex_unlock(&lm->lock); in lm8323_resume()
824 if (lm->pwm[i].enabled) in lm8323_resume()
825 led_classdev_resume(&lm->pwm[i].cdev); in lm8323_resume()