Lines Matching refs:lm

162 static int lm8323_write(struct lm8323_chip *lm, int len, ...)
171 dev_err(&lm->client->dev, "tried to send %d bytes\n", len);
185 ret = i2c_master_send(lm->client, data, len);
187 ret = i2c_master_send(lm->client, data, len);
189 dev_err(&lm->client->dev, "sent %d bytes of %d total\n",
199 static int lm8323_read(struct lm8323_chip *lm, u8 cmd, u8 *buf, int len)
207 ret = i2c_master_send(lm->client, &cmd, 1);
209 ret = i2c_master_send(lm->client, &cmd, 1);
211 dev_err(&lm->client->dev, "sending read cmd 0x%02x failed\n",
216 ret = i2c_master_recv(lm->client, buf, len);
218 dev_err(&lm->client->dev, "wanted %d bytes, got %d\n",
227 static void lm8323_set_active_time(struct lm8323_chip *lm, int time)
229 lm8323_write(lm, 2, LM8323_CMD_SET_ACTIVE, time >> 2);
246 static void process_keys(struct lm8323_chip *lm)
250 int old_keys_down = lm->keys_down;
258 ret = lm8323_read(lm, LM8323_CMD_READ_FIFO, key_fifo, LM8323_FIFO_LEN);
261 dev_err(&lm->client->dev, "Failed reading fifo \n");
269 unsigned short keycode = lm->keymap[key];
271 dev_vdbg(&lm->client->dev, "key 0x%02x %s\n",
274 if (lm->kp_enabled) {
275 input_event(lm->idev, EV_MSC, MSC_SCAN, key);
276 input_report_key(lm->idev, keycode, isdown);
277 input_sync(lm->idev);
281 lm->keys_down++;
283 lm->keys_down--;
291 if (!old_keys_down && lm->keys_down)
292 lm8323_set_active_time(lm, 0);
293 if (old_keys_down && !lm->keys_down)
294 lm8323_set_active_time(lm, lm->active_time);
297 static void lm8323_process_error(struct lm8323_chip *lm)
301 if (lm8323_read(lm, LM8323_CMD_READ_ERR, &error, 1) == 1) {
303 dev_vdbg(&lm->client->dev, "fifo overflow!\n");
305 dev_vdbg(&lm->client->dev,
308 dev_vdbg(&lm->client->dev,
311 dev_vdbg(&lm->client->dev, "bad command parameter\n");
315 static void lm8323_reset(struct lm8323_chip *lm)
318 lm8323_write(lm, 2, LM8323_CMD_RESET, 0xAA);
321 static int lm8323_configure(struct lm8323_chip *lm)
323 int keysize = (lm->size_x << 4) | lm->size_y;
325 int debounce = lm->debounce_time >> 2;
326 int active = lm->active_time >> 2;
335 lm8323_write(lm, 2, LM8323_CMD_WRITE_CFG, 0);
336 lm8323_write(lm, 2, LM8323_CMD_WRITE_CLOCK, clock);
337 lm8323_write(lm, 2, LM8323_CMD_SET_KEY_SIZE, keysize);
338 lm8323_set_active_time(lm, lm->active_time);
339 lm8323_write(lm, 2, LM8323_CMD_SET_DEBOUNCE, debounce);
340 lm8323_write(lm, 3, LM8323_CMD_WRITE_PORT_STATE, 0xff, 0xff);
341 lm8323_write(lm, 3, LM8323_CMD_WRITE_PORT_SEL, 0, 0);
366 struct lm8323_chip *lm = _lm;
370 mutex_lock(&lm->lock);
372 while ((lm8323_read(lm, LM8323_CMD_READ_INT, &ints, 1) == 1) && ints) {
374 process_keys(lm);
377 dev_vdbg(&lm->client->dev, "rotator fired\n");
380 dev_vdbg(&lm->client->dev, "error!\n");
381 lm8323_process_error(lm);
384 dev_err(&lm->client->dev, "chip lost config; "
386 lm8323_configure(lm);
390 dev_vdbg(&lm->client->dev,
392 pwm_done(&lm->pwm[i]);
397 mutex_unlock(&lm->lock);
405 static int lm8323_read_id(struct lm8323_chip *lm, u8 *buf)
409 bytes = lm8323_read(lm, LM8323_CMD_READ_ID, buf, 2);
501 struct lm8323_chip *lm = pwm->chip;
513 mutex_lock(&lm->lock);
514 if (likely(!lm->pm_suspend))
518 mutex_unlock(&lm->lock);
555 static int init_pwm(struct lm8323_chip *lm, int id, struct device *dev,
562 pwm = &lm->pwm[id - 1];
572 pwm->chip = lm;
593 struct lm8323_chip *lm = dev_get_drvdata(dev);
595 return sprintf(buf, "%u\n", !lm->kp_enabled);
602 struct lm8323_chip *lm = dev_get_drvdata(dev);
610 mutex_lock(&lm->lock);
611 lm->kp_enabled = !i;
612 mutex_unlock(&lm->lock);
623 struct lm8323_chip *lm;
646 lm = kzalloc(sizeof *lm, GFP_KERNEL);
648 if (!lm || !idev) {
653 lm->client = client;
654 lm->idev = idev;
655 mutex_init(&lm->lock);
657 lm->size_x = pdata->size_x;
658 lm->size_y = pdata->size_y;
660 lm->size_x, lm->size_y);
662 lm->debounce_time = pdata->debounce_time;
663 lm->active_time = pdata->active_time;
665 lm8323_reset(lm);
670 while (lm8323_read(lm, LM8323_CMD_READ_INT, data, 1) == 1) {
683 lm8323_configure(lm);
686 if (lm8323_read_id(lm, data) != 0) {
693 err = init_pwm(lm, pwm + 1, &client->dev,
699 lm->kp_enabled = true;
705 snprintf(lm->phys, sizeof(lm->phys),
707 idev->phys = lm->phys;
713 lm->keymap[i] = pdata->keymap[i];
727 IRQF_TRIGGER_LOW|IRQF_ONESHOT, "lm8323", lm);
733 i2c_set_clientdata(client, lm);
747 if (lm->pwm[pwm].enabled)
748 led_classdev_unregister(&lm->pwm[pwm].cdev);
751 kfree(lm);
757 struct lm8323_chip *lm = i2c_get_clientdata(client);
761 free_irq(client->irq, lm);
763 input_unregister_device(lm->idev);
765 device_remove_file(&lm->client->dev, &dev_attr_disable_kp);
768 if (lm->pwm[i].enabled)
769 led_classdev_unregister(&lm->pwm[i].cdev);
771 kfree(lm);
784 struct lm8323_chip *lm = i2c_get_clientdata(client);
790 mutex_lock(&lm->lock);
791 lm->pm_suspend = true;
792 mutex_unlock(&lm->lock);
795 if (lm->pwm[i].enabled)
796 led_classdev_suspend(&lm->pwm[i].cdev);
804 struct lm8323_chip *lm = i2c_get_clientdata(client);
807 mutex_lock(&lm->lock);
808 lm->pm_suspend = false;
809 mutex_unlock(&lm->lock);
812 if (lm->pwm[i].enabled)
813 led_classdev_resume(&lm->pwm[i].cdev);