diff options
Diffstat (limited to 'drivers')
-rw-r--r-- | drivers/staging/Makefile | 2 | ||||
-rw-r--r-- | drivers/staging/mrst-touchscreen/Kconfig | 2 | ||||
-rw-r--r-- | drivers/staging/mrst-touchscreen/Makefile | 2 | ||||
-rw-r--r-- | drivers/staging/mrst-touchscreen/TODO | 2 | ||||
-rw-r--r-- | drivers/staging/mrst-touchscreen/intel-mid-touch.c | 98 |
5 files changed, 25 insertions, 81 deletions
diff --git a/drivers/staging/Makefile b/drivers/staging/Makefile index 9fa25133874a..d071bac73acc 100644 --- a/drivers/staging/Makefile +++ b/drivers/staging/Makefile | |||
@@ -52,5 +52,5 @@ obj-$(CONFIG_CXT1E1) += cxt1e1/ | |||
52 | obj-$(CONFIG_TI_ST) += ti-st/ | 52 | obj-$(CONFIG_TI_ST) += ti-st/ |
53 | obj-$(CONFIG_ADIS16255) += adis16255/ | 53 | obj-$(CONFIG_ADIS16255) += adis16255/ |
54 | obj-$(CONFIG_FB_XGI) += xgifb/ | 54 | obj-$(CONFIG_FB_XGI) += xgifb/ |
55 | obj-$(CONFIG_TOUCHSCREEN_MRSTOUCH) += mrst-touchscreen/ | 55 | obj-$(CONFIG_TOUCHSCREEN_INTEL_MID) += mrst-touchscreen/ |
56 | obj-$(CONFIG_MSM_STAGING) += msm/ | 56 | obj-$(CONFIG_MSM_STAGING) += msm/ |
diff --git a/drivers/staging/mrst-touchscreen/Kconfig b/drivers/staging/mrst-touchscreen/Kconfig index c2af49217084..775d740bb61f 100644 --- a/drivers/staging/mrst-touchscreen/Kconfig +++ b/drivers/staging/mrst-touchscreen/Kconfig | |||
@@ -1,6 +1,6 @@ | |||
1 | config TOUCHSCREEN_INTEL_MID | 1 | config TOUCHSCREEN_INTEL_MID |
2 | tristate "Intel MID platform resistive touchscreen" | 2 | tristate "Intel MID platform resistive touchscreen" |
3 | depends on INTEL_SCU_IPC | 3 | depends on INTEL_SCU_IPC && INPUT_TOUCHSCREEN |
4 | default y | 4 | default y |
5 | help | 5 | help |
6 | Say Y here if you have a Intel MID based touchscreen | 6 | Say Y here if you have a Intel MID based touchscreen |
diff --git a/drivers/staging/mrst-touchscreen/Makefile b/drivers/staging/mrst-touchscreen/Makefile index 2d638b0d70bf..155f58b57dbe 100644 --- a/drivers/staging/mrst-touchscreen/Makefile +++ b/drivers/staging/mrst-touchscreen/Makefile | |||
@@ -1,3 +1,3 @@ | |||
1 | obj-$(CONFIG_TOUCHSCREEN_INTEL_MID) := intel_mid_touch.o | 1 | obj-$(CONFIG_TOUCHSCREEN_INTEL_MID) := intel-mid-touch.o |
2 | 2 | ||
3 | 3 | ||
diff --git a/drivers/staging/mrst-touchscreen/TODO b/drivers/staging/mrst-touchscreen/TODO index 7157028d634a..84aa6958d0aa 100644 --- a/drivers/staging/mrst-touchscreen/TODO +++ b/drivers/staging/mrst-touchscreen/TODO | |||
@@ -1,2 +1,4 @@ | |||
1 | - Move the driver to not think it is SPI (requires fixing some of the SFI | 1 | - Move the driver to not think it is SPI (requires fixing some of the SFI |
2 | and firmware side) | 2 | and firmware side) |
3 | - Fix mutex in IRQ stuff - threaded IRQ ? | ||
4 | |||
diff --git a/drivers/staging/mrst-touchscreen/intel-mid-touch.c b/drivers/staging/mrst-touchscreen/intel-mid-touch.c index abba22f921be..6fed01ee82da 100644 --- a/drivers/staging/mrst-touchscreen/intel-mid-touch.c +++ b/drivers/staging/mrst-touchscreen/intel-mid-touch.c | |||
@@ -23,7 +23,6 @@ | |||
23 | * ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ | 23 | * ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ |
24 | * | 24 | * |
25 | * TODO: | 25 | * TODO: |
26 | * kill off mrstouch_debug eventually | ||
27 | * review conversion of r/m/w sequences | 26 | * review conversion of r/m/w sequences |
28 | * Replace interrupt mutex abuse | 27 | * Replace interrupt mutex abuse |
29 | * Kill of mrstouchdevp pointer | 28 | * Kill of mrstouchdevp pointer |
@@ -43,16 +42,6 @@ | |||
43 | #include <asm/intel_scu_ipc.h> | 42 | #include <asm/intel_scu_ipc.h> |
44 | 43 | ||
45 | 44 | ||
46 | #if defined(MRSTOUCH_DEBUG) | ||
47 | #define mrstouch_debug(fmt, args...)\ | ||
48 | do { \ | ||
49 | printk(KERN_DEBUG "\n[MRSTOUCH(%d)] - ", __LINE__); \ | ||
50 | printk(KERN_DEBUG fmt, ##args); \ | ||
51 | } while (0); | ||
52 | #else | ||
53 | #define mrstouch_debug(fmt, args...) | ||
54 | #endif | ||
55 | |||
56 | /* PMIC Interrupt registers */ | 45 | /* PMIC Interrupt registers */ |
57 | #define PMIC_REG_ID1 0x00 /*PMIC ID1 register */ | 46 | #define PMIC_REG_ID1 0x00 /*PMIC ID1 register */ |
58 | 47 | ||
@@ -100,6 +89,9 @@ | |||
100 | #define MAX_X 1024 | 89 | #define MAX_X 1024 |
101 | #define MIN_Y 10 | 90 | #define MIN_Y 10 |
102 | #define MAX_Y 1024 | 91 | #define MAX_Y 1024 |
92 | #define MIN_P 0 | ||
93 | #define MAX_P TOUCH_PRESSURE_FS | ||
94 | |||
103 | #define WAIT_ADC_COMPLETION 10 | 95 | #define WAIT_ADC_COMPLETION 10 |
104 | 96 | ||
105 | /* PMIC ADC round robin delays */ | 97 | /* PMIC ADC round robin delays */ |
@@ -124,8 +116,6 @@ struct mrstouch_dev { | |||
124 | int irq; /* Touch screen IRQ # */ | 116 | int irq; /* Touch screen IRQ # */ |
125 | uint vendor; /* PMIC vendor */ | 117 | uint vendor; /* PMIC vendor */ |
126 | uint rev; /* PMIC revision */ | 118 | uint rev; /* PMIC revision */ |
127 | bool suspended; /* Device suspended status */ | ||
128 | bool disabled; /* Device disabled status */ | ||
129 | u16 x; /* X coordinate */ | 119 | u16 x; /* X coordinate */ |
130 | u16 y; /* Y coordinate */ | 120 | u16 y; /* Y coordinate */ |
131 | bool pendown; /* PEN position */ | 121 | bool pendown; /* PEN position */ |
@@ -320,8 +310,6 @@ static int mrstouch_adc_init(struct mrstouch_dev *tsdev) | |||
320 | 310 | ||
321 | tsdev->asr = start; | 311 | tsdev->asr = start; |
322 | 312 | ||
323 | mrstouch_debug("Channel offset(%d): 0x%X\n", tsdev->asr, tsdev->vendor); | ||
324 | |||
325 | /* ADC power on, start, enable PENDET and set loop delay | 313 | /* ADC power on, start, enable PENDET and set loop delay |
326 | * ADC loop delay is set to 4.5 ms approximately | 314 | * ADC loop delay is set to 4.5 ms approximately |
327 | * Loop delay more than this results in jitter in adc readings | 315 | * Loop delay more than this results in jitter in adc readings |
@@ -355,7 +343,6 @@ static void mrstouch_report_xy(struct mrstouch_dev *tsdev, u16 x, u16 y, u16 z) | |||
355 | 343 | ||
356 | if (tsdev->pendown && z <= TOUCH_PRESSURE) { | 344 | if (tsdev->pendown && z <= TOUCH_PRESSURE) { |
357 | /* Pen removed, report button release */ | 345 | /* Pen removed, report button release */ |
358 | mrstouch_debug("BTN REL(%d)", z); | ||
359 | input_report_key(tsdev->input, BTN_TOUCH, 0); | 346 | input_report_key(tsdev->input, BTN_TOUCH, 0); |
360 | tsdev->pendown = false; | 347 | tsdev->pendown = false; |
361 | } | 348 | } |
@@ -371,7 +358,6 @@ static void mrstouch_report_xy(struct mrstouch_dev *tsdev, u16 x, u16 y, u16 z) | |||
371 | if (x < MIN_X || x > MAX_X || y < MIN_Y || y > MAX_Y) { | 358 | if (x < MIN_X || x > MAX_X || y < MIN_Y || y > MAX_Y) { |
372 | /* Spurious values, release button if touched and return */ | 359 | /* Spurious values, release button if touched and return */ |
373 | if (tsdev->pendown) { | 360 | if (tsdev->pendown) { |
374 | mrstouch_debug("BTN REL(%d)", z); | ||
375 | input_report_key(tsdev->input, BTN_TOUCH, 0); | 361 | input_report_key(tsdev->input, BTN_TOUCH, 0); |
376 | tsdev->pendown = false; | 362 | tsdev->pendown = false; |
377 | } | 363 | } |
@@ -382,13 +368,13 @@ static void mrstouch_report_xy(struct mrstouch_dev *tsdev, u16 x, u16 y, u16 z) | |||
382 | 368 | ||
383 | input_report_abs(tsdev->input, ABS_X, x); | 369 | input_report_abs(tsdev->input, ABS_X, x); |
384 | input_report_abs(tsdev->input, ABS_Y, y); | 370 | input_report_abs(tsdev->input, ABS_Y, y); |
371 | input_report_abs(tsdev->input, ABS_PRESSURE, z); | ||
385 | input_sync(tsdev->input); | 372 | input_sync(tsdev->input); |
386 | } | 373 | } |
387 | 374 | ||
388 | 375 | ||
389 | if (!tsdev->pendown && z > TOUCH_PRESSURE) { | 376 | if (!tsdev->pendown && z > TOUCH_PRESSURE) { |
390 | /* Pen touched, report button touch */ | 377 | /* Pen touched, report button touch */ |
391 | mrstouch_debug("BTN TCH(%d, %d, %d)", x, y, z); | ||
392 | input_report_key(tsdev->input, BTN_TOUCH, 1); | 378 | input_report_key(tsdev->input, BTN_TOUCH, 1); |
393 | tsdev->pendown = true; | 379 | tsdev->pendown = true; |
394 | } | 380 | } |
@@ -446,18 +432,7 @@ static int mrstouch_pmic_fs_adc_read(struct mrstouch_dev *tsdev) | |||
446 | z |= data[1] & 0x7; /* Lower 3 bits */ | 432 | z |= data[1] & 0x7; /* Lower 3 bits */ |
447 | z &= 0x3FF; | 433 | z &= 0x3FF; |
448 | 434 | ||
449 | #if defined(MRSTOUCH_PRINT_XYZP) | 435 | mrstouch_report_xy(tsdev, x, y, z); |
450 | mrstouch_debug("X: %d, Y: %d, Z: %d", x, y, z); | ||
451 | #endif | ||
452 | |||
453 | if (z >= TOUCH_PRESSURE_FS) { | ||
454 | mrstouch_report_xy(tsdev, x, y, TOUCH_PRESSURE - 1); /* Pen Removed */ | ||
455 | return TOUCH_PRESSURE - 1; | ||
456 | } else { | ||
457 | mrstouch_report_xy(tsdev, x, y, TOUCH_PRESSURE + 1); /* Pen Touched */ | ||
458 | return TOUCH_PRESSURE + 1; | ||
459 | } | ||
460 | |||
461 | return 0; | 436 | return 0; |
462 | 437 | ||
463 | ipc_error: | 438 | ipc_error: |
@@ -615,14 +590,6 @@ static int mrstouch_adc_read(struct mrstouch_dev *tsdev) | |||
615 | if (err) | 590 | if (err) |
616 | goto ipc_error; | 591 | goto ipc_error; |
617 | 592 | ||
618 | #if defined(MRSTOUCH_PRINT_XYZP) | ||
619 | printk(KERN_INFO "X+: %d, Y+: %d, Z+: %d\n", xp, yp, zp); | ||
620 | #endif | ||
621 | |||
622 | #if defined(MRSTOUCH_PRINT_XYZM) | ||
623 | printk(KERN_INFO "X-: %d, Y-: %d, Z-: %d\n", xm, ym, zm); | ||
624 | #endif | ||
625 | |||
626 | mrstouch_report_xy(tsdev, xp, yp, zp); /* report x and y to eventX */ | 593 | mrstouch_report_xy(tsdev, xp, yp, zp); /* report x and y to eventX */ |
627 | 594 | ||
628 | return zp; | 595 | return zp; |
@@ -694,12 +661,10 @@ static int ts_input_dev_init(struct mrstouch_dev *tsdev, struct spi_device *spi) | |||
694 | { | 661 | { |
695 | int err = 0; | 662 | int err = 0; |
696 | 663 | ||
697 | mrstouch_debug("%s", __func__); | ||
698 | |||
699 | tsdev->input = input_allocate_device(); | 664 | tsdev->input = input_allocate_device(); |
700 | if (!tsdev->input) { | 665 | if (!tsdev->input) { |
701 | dev_err(&tsdev->spi->dev, "Unable to allocate input device.\n"); | 666 | dev_err(&tsdev->spi->dev, "Unable to allocate input device.\n"); |
702 | return -EINVAL; | 667 | return -ENOMEM; |
703 | } | 668 | } |
704 | 669 | ||
705 | tsdev->input->name = "mrst_touchscreen"; | 670 | tsdev->input->name = "mrst_touchscreen"; |
@@ -714,8 +679,9 @@ static int ts_input_dev_init(struct mrstouch_dev *tsdev, struct spi_device *spi) | |||
714 | tsdev->input->evbit[0] = BIT_MASK(EV_KEY) | BIT_MASK(EV_ABS); | 679 | tsdev->input->evbit[0] = BIT_MASK(EV_KEY) | BIT_MASK(EV_ABS); |
715 | tsdev->input->keybit[BIT_WORD(BTN_TOUCH)] = BIT_MASK(BTN_TOUCH); | 680 | tsdev->input->keybit[BIT_WORD(BTN_TOUCH)] = BIT_MASK(BTN_TOUCH); |
716 | 681 | ||
717 | input_set_abs_params(tsdev->input, ABS_X, MIN_X, MIN_Y, 0, 0); | 682 | input_set_abs_params(tsdev->input, ABS_X, MIN_X, MAX_X, 0, 0); |
718 | input_set_abs_params(tsdev->input, ABS_Y, MIN_X, MIN_Y, 0, 0); | 683 | input_set_abs_params(tsdev->input, ABS_Y, MIN_Y, MAX_Y, 0, 0); |
684 | input_set_abs_params(tsdev->input, ABS_PRESSURE, MIN_P, MAX_P, 0, 0); | ||
719 | 685 | ||
720 | err = input_register_device(tsdev->input); | 686 | err = input_register_device(tsdev->input); |
721 | if (err) { | 687 | if (err) { |
@@ -723,9 +689,6 @@ static int ts_input_dev_init(struct mrstouch_dev *tsdev, struct spi_device *spi) | |||
723 | input_free_device(tsdev->input); | 689 | input_free_device(tsdev->input); |
724 | return err; | 690 | return err; |
725 | } | 691 | } |
726 | |||
727 | mrstouch_debug("%s", "mrstouch initialized"); | ||
728 | |||
729 | return 0; | 692 | return 0; |
730 | 693 | ||
731 | } | 694 | } |
@@ -737,8 +700,6 @@ static int __devinit mrstouch_probe(struct spi_device *mrstouch_spi) | |||
737 | unsigned int myirq; | 700 | unsigned int myirq; |
738 | struct mrstouch_dev *tsdev; | 701 | struct mrstouch_dev *tsdev; |
739 | 702 | ||
740 | mrstouch_debug("%s(%p)", __func__, mrstouch_spi); | ||
741 | |||
742 | mrstouchdevp = NULL; | 703 | mrstouchdevp = NULL; |
743 | myirq = mrstouch_spi->irq; | 704 | myirq = mrstouch_spi->irq; |
744 | 705 | ||
@@ -768,18 +729,17 @@ static int __devinit mrstouch_probe(struct spi_device *mrstouch_spi) | |||
768 | err = ts_input_dev_init(tsdev, mrstouch_spi); | 729 | err = ts_input_dev_init(tsdev, mrstouch_spi); |
769 | if (err) { | 730 | if (err) { |
770 | dev_err(&tsdev->spi->dev, "ts_input_dev_init failed"); | 731 | dev_err(&tsdev->spi->dev, "ts_input_dev_init failed"); |
771 | goto mrstouch_err_free_mem; | 732 | goto mrstouch_err_free_dev; |
772 | } | 733 | } |
773 | 734 | ||
774 | mutex_init(&tsdev->lock); | 735 | mutex_init(&tsdev->lock); |
775 | mutex_lock(&tsdev->lock) | 736 | mutex_lock(&tsdev->lock); |
776 | 737 | ||
777 | mrstouch_debug("Requesting IRQ-%d", myirq); | ||
778 | err = request_irq(myirq, pendet_intr_handler, | 738 | err = request_irq(myirq, pendet_intr_handler, |
779 | 0, "mrstouch", tsdev); | 739 | 0, "mrstouch", tsdev); |
780 | if (err) { | 740 | if (err) { |
781 | dev_err(&tsdev->spi->dev, "unable to allocate irq\n"); | 741 | dev_err(&tsdev->spi->dev, "unable to allocate irq\n"); |
782 | goto mrstouch_err_free_mem; | 742 | goto mrstouch_err_free_dev; |
783 | } | 743 | } |
784 | 744 | ||
785 | tsdev->pendet_thrd = kthread_run(mrstouch_pendet, | 745 | tsdev->pendet_thrd = kthread_run(mrstouch_pendet, |
@@ -787,38 +747,24 @@ static int __devinit mrstouch_probe(struct spi_device *mrstouch_spi) | |||
787 | if (IS_ERR(tsdev->pendet_thrd)) { | 747 | if (IS_ERR(tsdev->pendet_thrd)) { |
788 | dev_err(&tsdev->spi->dev, "kthread_run failed\n"); | 748 | dev_err(&tsdev->spi->dev, "kthread_run failed\n"); |
789 | err = PTR_ERR(tsdev->pendet_thrd); | 749 | err = PTR_ERR(tsdev->pendet_thrd); |
790 | goto mrstouch_err_free_mem; | 750 | goto mrstouch_err_free_irq; |
791 | } | 751 | } |
792 | mrstouch_debug("%s", "Driver initialized"); | ||
793 | return 0; | 752 | return 0; |
794 | 753 | mrstouch_err_free_irq: | |
754 | free_irq(myirq, tsdev); | ||
755 | mrstouch_err_free_dev: | ||
756 | input_unregister_device(tsdev->input); | ||
795 | mrstouch_err_free_mem: | 757 | mrstouch_err_free_mem: |
796 | kfree(tsdev); | 758 | kfree(tsdev); |
797 | return err; | 759 | return err; |
798 | } | 760 | } |
799 | 761 | ||
800 | static int mrstouch_suspend(struct spi_device *spi, pm_message_t msg) | ||
801 | { | ||
802 | mrstouch_debug("%s", __func__); | ||
803 | mrstouchdevp->suspended = 1; | ||
804 | return 0; | ||
805 | } | ||
806 | |||
807 | static int mrstouch_resume(struct spi_device *spi) | ||
808 | { | ||
809 | mrstouch_debug("%s", __func__); | ||
810 | mrstouchdevp->suspended = 0; | ||
811 | return 0; | ||
812 | } | ||
813 | |||
814 | static int mrstouch_remove(struct spi_device *spi) | 762 | static int mrstouch_remove(struct spi_device *spi) |
815 | { | 763 | { |
816 | mrstouch_debug("%s", __func__); | ||
817 | free_irq(mrstouchdevp->irq, mrstouchdevp); | 764 | free_irq(mrstouchdevp->irq, mrstouchdevp); |
818 | input_unregister_device(mrstouchdevp->input); | ||
819 | input_free_device(mrstouchdevp->input); | ||
820 | if (mrstouchdevp->pendet_thrd) | 765 | if (mrstouchdevp->pendet_thrd) |
821 | kthread_stop(mrstouchdevp->pendet_thrd); | 766 | kthread_stop(mrstouchdevp->pendet_thrd); |
767 | input_unregister_device(mrstouchdevp->input); | ||
822 | kfree(mrstouchdevp); | 768 | kfree(mrstouchdevp); |
823 | return 0; | 769 | return 0; |
824 | } | 770 | } |
@@ -830,8 +776,6 @@ static struct spi_driver mrstouch_driver = { | |||
830 | .owner = THIS_MODULE, | 776 | .owner = THIS_MODULE, |
831 | }, | 777 | }, |
832 | .probe = mrstouch_probe, | 778 | .probe = mrstouch_probe, |
833 | .suspend = mrstouch_suspend, | ||
834 | .resume = mrstouch_resume, | ||
835 | .remove = mrstouch_remove, | 779 | .remove = mrstouch_remove, |
836 | }; | 780 | }; |
837 | 781 | ||
@@ -839,11 +783,10 @@ static int __init mrstouch_module_init(void) | |||
839 | { | 783 | { |
840 | int err; | 784 | int err; |
841 | 785 | ||
842 | mrstouch_debug("%s", __func__); | ||
843 | err = spi_register_driver(&mrstouch_driver); | 786 | err = spi_register_driver(&mrstouch_driver); |
844 | if (err) { | 787 | if (err) { |
845 | mrstouch_debug("%s(%d)", "SPI PENDET failed", err); | 788 | printk(KERN_ERR "%s(%d)", "SPI PENDET failed", err); |
846 | return -1; | 789 | return err;; |
847 | } | 790 | } |
848 | 791 | ||
849 | return 0; | 792 | return 0; |
@@ -851,7 +794,6 @@ static int __init mrstouch_module_init(void) | |||
851 | 794 | ||
852 | static void __exit mrstouch_module_exit(void) | 795 | static void __exit mrstouch_module_exit(void) |
853 | { | 796 | { |
854 | mrstouch_debug("%s", __func__); | ||
855 | spi_unregister_driver(&mrstouch_driver); | 797 | spi_unregister_driver(&mrstouch_driver); |
856 | return; | 798 | return; |
857 | } | 799 | } |