diff options
author | Praneeth Bajjuri | 2017-08-17 16:08:41 -0500 |
---|---|---|
committer | Praneeth Bajjuri | 2017-08-17 16:08:41 -0500 |
commit | f05c186d5e615d8a16c946946d1c9102777f9e96 (patch) | |
tree | b14a8eb6f71469d397fbafd5b23106893d34446d | |
parent | 194e6054dc8591d9bcfca120e7afb52665b36f94 (diff) | |
parent | b479cc78e8c20e2f65c519fb84b4ba5bf506ca75 (diff) | |
download | kernel-omap-f05c186d5e615d8a16c946946d1c9102777f9e96.tar.gz kernel-omap-f05c186d5e615d8a16c946946d1c9102777f9e96.tar.xz kernel-omap-f05c186d5e615d8a16c946946d1c9102777f9e96.zip |
Merge branch 'p-ti-lsk-linux-4.4.y-next' into p-ti-lsk-android-linux-4.4.y
* p-ti-lsk-linux-4.4.y-next:
arm: dts: dra76: enable auo fpdlink display
drivers: video: serdes: support ub921 serializer
arm: dts: dra7: enable auo fpdlink display
arm: dts: add auo fpdlink display dts fragment
drivers: video: serdes: support ub924 deserializer
Input: goodix - add polling support for touch events
drivers: video: serdes: avoid splitting i2c transfer
drivers: video: serdes: improve error message
arm: dts: dra7: fpdlink: restructure dts for reuse
Change-Id: Ia3842f0797a348f826494d47ee9c48fe2d8a9662
Signed-off-by: Praneeth Bajjuri <praneeth@ti.com>
-rw-r--r-- | Documentation/devicetree/bindings/video/fpd3-serdes.txt | 2 | ||||
-rw-r--r-- | arch/arm/boot/dts/Makefile | 3 | ||||
-rw-r--r-- | arch/arm/boot/dts/dra7-evm-fpd-auo-g101evn01.0.dts | 37 | ||||
-rw-r--r-- | arch/arm/boot/dts/dra7-evm-fpd-lg.dts | 38 | ||||
-rw-r--r-- | arch/arm/boot/dts/dra7-evm.dts | 61 | ||||
-rw-r--r-- | arch/arm/boot/dts/dra72-evm-common.dtsi | 60 | ||||
-rw-r--r-- | arch/arm/boot/dts/dra72-evm-fpd-lg.dts | 39 | ||||
-rw-r--r-- | arch/arm/boot/dts/dra72-evm.dts | 1 | ||||
-rw-r--r-- | arch/arm/boot/dts/dra76-evm-fpd-auo-g101evn01.0.dts | 67 | ||||
-rw-r--r-- | arch/arm/boot/dts/dra76-evm.dts | 30 | ||||
-rw-r--r-- | arch/arm/boot/dts/dra7x-evm-fpd-auo-g101evn01.0.dtsi | 107 | ||||
-rw-r--r-- | arch/arm/boot/dts/dra7x-evm-fpd-lg.dtsi | 59 | ||||
-rw-r--r-- | arch/arm/boot/dts/dra7x-evm-lcd-lg.dtsi | 1 | ||||
-rw-r--r-- | arch/arm/boot/dts/dra7x-evm-lcd-osd.dtsi | 1 | ||||
-rw-r--r-- | drivers/input/touchscreen/Kconfig | 1 | ||||
-rw-r--r-- | drivers/input/touchscreen/goodix.c | 99 | ||||
-rw-r--r-- | drivers/video/serdes/fpd3_i2c_adap.c | 32 | ||||
-rw-r--r-- | drivers/video/serdes/fpd3_serdes.c | 40 |
18 files changed, 527 insertions, 151 deletions
diff --git a/Documentation/devicetree/bindings/video/fpd3-serdes.txt b/Documentation/devicetree/bindings/video/fpd3-serdes.txt index e2afceeafacb..afa56806f7a5 100644 --- a/Documentation/devicetree/bindings/video/fpd3-serdes.txt +++ b/Documentation/devicetree/bindings/video/fpd3-serdes.txt | |||
@@ -32,6 +32,8 @@ Required Properties: | |||
32 | - "ti,ds90ub914aq": For TI FPDlink3 12bit video de serializer | 32 | - "ti,ds90ub914aq": For TI FPDlink3 12bit video de serializer |
33 | - "ti,ds90uh925q": For TI FPDlink3 24bit video serializer | 33 | - "ti,ds90uh925q": For TI FPDlink3 24bit video serializer |
34 | - "ti,ds90uh928q": For TI FPDlink3 24bit video de serializer | 34 | - "ti,ds90uh928q": For TI FPDlink3 24bit video de serializer |
35 | - "ti,ds90ub924q": For TI FPDlink3 24bit video de serializer | ||
36 | - "ti,ds90ub921q": For TI FPDlink3 24bit video serializer | ||
35 | 37 | ||
36 | - reg: I2C slave address | 38 | - reg: I2C slave address |
37 | This would be the alias adress for remote device. The CPU side | 39 | This would be the alias adress for remote device. The CPU side |
diff --git a/arch/arm/boot/dts/Makefile b/arch/arm/boot/dts/Makefile index ddb6c3b1d8de..8b28d3badaea 100644 --- a/arch/arm/boot/dts/Makefile +++ b/arch/arm/boot/dts/Makefile | |||
@@ -494,11 +494,13 @@ dtb-$(CONFIG_SOC_OMAP5) += \ | |||
494 | dtb-$(CONFIG_SOC_DRA7XX) += \ | 494 | dtb-$(CONFIG_SOC_DRA7XX) += \ |
495 | dra7-evm.dtb \ | 495 | dra7-evm.dtb \ |
496 | dra7-evm-lcd-lg.dtb \ | 496 | dra7-evm-lcd-lg.dtb \ |
497 | dra7-evm-fpd-lg.dtb \ | ||
497 | dra7-evm-lcd-lg-late-attach.dtb \ | 498 | dra7-evm-lcd-lg-late-attach.dtb \ |
498 | dra7-evm-lcd-lg-late-attach-no-map.dtb \ | 499 | dra7-evm-lcd-lg-late-attach-no-map.dtb \ |
499 | dra7-evm-lcd-osd.dtb \ | 500 | dra7-evm-lcd-osd.dtb \ |
500 | dra7-evm-lcd-osd101t2587.dtb \ | 501 | dra7-evm-lcd-osd101t2587.dtb \ |
501 | dra7-evm-lcd-osd-late-attach.dtb \ | 502 | dra7-evm-lcd-osd-late-attach.dtb \ |
503 | dra7-evm-fpd-auo-g101evn01.0.dtb \ | ||
502 | dra7-evm-vision.dtb \ | 504 | dra7-evm-vision.dtb \ |
503 | am57xx-beagle-x15.dtb \ | 505 | am57xx-beagle-x15.dtb \ |
504 | am57xx-beagle-x15-revb1.dtb \ | 506 | am57xx-beagle-x15-revb1.dtb \ |
@@ -514,6 +516,7 @@ dtb-$(CONFIG_SOC_DRA7XX) += \ | |||
514 | dra72-evm-lcd-lg.dtb \ | 516 | dra72-evm-lcd-lg.dtb \ |
515 | dra72-evm-lcd-osd.dtb \ | 517 | dra72-evm-lcd-osd.dtb \ |
516 | dra72-evm-lcd-osd101t2587.dtb \ | 518 | dra72-evm-lcd-osd101t2587.dtb \ |
519 | dra72-evm-fpd-lg.dtb \ | ||
517 | dra72-evm-revc.dtb \ | 520 | dra72-evm-revc.dtb \ |
518 | dra72-evm-revc-lcd-osd101t2045.dtb \ | 521 | dra72-evm-revc-lcd-osd101t2045.dtb \ |
519 | dra72-evm-revc-lcd-osd101t2587.dtb \ | 522 | dra72-evm-revc-lcd-osd101t2587.dtb \ |
diff --git a/arch/arm/boot/dts/dra7-evm-fpd-auo-g101evn01.0.dts b/arch/arm/boot/dts/dra7-evm-fpd-auo-g101evn01.0.dts new file mode 100644 index 000000000000..64e79754bb22 --- /dev/null +++ b/arch/arm/boot/dts/dra7-evm-fpd-auo-g101evn01.0.dts | |||
@@ -0,0 +1,37 @@ | |||
1 | #include "dra7-evm.dts" | ||
2 | #include "dra7x-evm-fpd-auo-g101evn01.0.dtsi" | ||
3 | |||
4 | / { | ||
5 | aliases { | ||
6 | display0 = &fpd_disp; | ||
7 | display1 = &hdmi0; | ||
8 | }; | ||
9 | }; | ||
10 | |||
11 | &dss { | ||
12 | ports { | ||
13 | status = "ok"; | ||
14 | }; | ||
15 | }; | ||
16 | |||
17 | &disp_ser { | ||
18 | status = "ok"; | ||
19 | ranges = <0x0 0x2d>; | ||
20 | }; | ||
21 | |||
22 | /* Tie the end points of DSS and FPDLink together */ | ||
23 | |||
24 | &fpd_in { | ||
25 | remote-endpoint = <&dpi_out3>; | ||
26 | }; | ||
27 | |||
28 | &dpi_out3 { | ||
29 | remote-endpoint = <&fpd_in>; | ||
30 | }; | ||
31 | |||
32 | &lcd_fpd { | ||
33 | enable-gpios = <&pcf_gpio_21 0 GPIO_ACTIVE_LOW>; | ||
34 | /* P0, SEL_GPMC_AD_VID_S0 */ | ||
35 | |||
36 | status = "ok"; | ||
37 | }; | ||
diff --git a/arch/arm/boot/dts/dra7-evm-fpd-lg.dts b/arch/arm/boot/dts/dra7-evm-fpd-lg.dts new file mode 100644 index 000000000000..b8df0766ecff --- /dev/null +++ b/arch/arm/boot/dts/dra7-evm-fpd-lg.dts | |||
@@ -0,0 +1,38 @@ | |||
1 | #include "dra7-evm.dts" | ||
2 | #include "dra7x-evm-fpd-lg.dtsi" | ||
3 | |||
4 | / { | ||
5 | aliases { | ||
6 | display0 = &fpd_disp; | ||
7 | display1 = &hdmi0; | ||
8 | }; | ||
9 | }; | ||
10 | |||
11 | &dss { | ||
12 | ports { | ||
13 | status = "ok"; | ||
14 | }; | ||
15 | }; | ||
16 | |||
17 | &disp_ser { | ||
18 | status = "ok"; | ||
19 | ranges = <0x2c 0x2c>, | ||
20 | <0x1c 0x1c>; | ||
21 | }; | ||
22 | |||
23 | /* Tie the end points of DSS and FPDLink together */ | ||
24 | |||
25 | &fpd_in { | ||
26 | remote-endpoint = <&dpi_out3>; | ||
27 | }; | ||
28 | |||
29 | &dpi_out3 { | ||
30 | remote-endpoint = <&fpd_in>; | ||
31 | }; | ||
32 | |||
33 | &lcd_fpd { | ||
34 | enable-gpios = <&pcf_gpio_21 0 GPIO_ACTIVE_LOW>; | ||
35 | /* P0, SEL_GPMC_AD_VID_S0 */ | ||
36 | |||
37 | status = "ok"; | ||
38 | }; | ||
diff --git a/arch/arm/boot/dts/dra7-evm.dts b/arch/arm/boot/dts/dra7-evm.dts index e1d794f6a2f2..9171c04dd954 100644 --- a/arch/arm/boot/dts/dra7-evm.dts +++ b/arch/arm/boot/dts/dra7-evm.dts | |||
@@ -54,7 +54,6 @@ | |||
54 | }; | 54 | }; |
55 | 55 | ||
56 | aliases { | 56 | aliases { |
57 | display1 = &fpd_disp; | ||
58 | i2c7 = &disp_ser; | 57 | i2c7 = &disp_ser; |
59 | }; | 58 | }; |
60 | 59 | ||
@@ -850,66 +849,7 @@ i2c_p3_exp: &i2c2 { | |||
850 | 849 | ||
851 | #address-cells = <1>; | 850 | #address-cells = <1>; |
852 | #size-cells = <0>; | 851 | #size-cells = <0>; |
853 | ranges = <0x2c 0x2c>, | ||
854 | <0x1c 0x1c>; | ||
855 | |||
856 | disp_des: deserializer@2c { | ||
857 | compatible = "ti,ds90uh928q"; | ||
858 | reg = <0x2c>; | ||
859 | slave-mode; | ||
860 | }; | ||
861 | |||
862 | }; | ||
863 | }; | ||
864 | |||
865 | |||
866 | &disp_ser { | ||
867 | fpd_disp: tlc59108@1c { | ||
868 | #address-cells = <1>; | ||
869 | #size-cells = <0>; | ||
870 | compatible = "ti,tlc59108"; | ||
871 | reg = <0x1c>; | ||
872 | |||
873 | }; | ||
874 | }; | ||
875 | |||
876 | / { | ||
877 | lcd_fpd: display_fpd { | ||
878 | /* | ||
879 | * This is not really a dpi panel, but panel-dpi driver | ||
880 | * works as dummy panel driver. | ||
881 | */ | ||
882 | compatible = "lg,lp101wx2", "panel-dpi"; | ||
883 | |||
884 | label = "lcd_fpd"; | ||
885 | enable-gpios = <&pcf_gpio_21 0 GPIO_ACTIVE_LOW>; | ||
886 | /* P0, SEL_GPMC_AD_VID_S0 */ | ||
887 | status = "disabled"; | 852 | status = "disabled"; |
888 | |||
889 | panel-timing { | ||
890 | clock-frequency = <69300404>; | ||
891 | hactive = <1280>; | ||
892 | vactive = <800>; | ||
893 | |||
894 | hfront-porch = <48>; | ||
895 | hback-porch = <44>; | ||
896 | hsync-len = <32>; | ||
897 | |||
898 | vfront-porch = <4>; | ||
899 | vback-porch = <7>; | ||
900 | vsync-len = <12>; | ||
901 | |||
902 | hsync-active = <0>; | ||
903 | vsync-active = <0>; | ||
904 | de-active = <1>; | ||
905 | pixelclk-active = <0>; | ||
906 | }; | ||
907 | |||
908 | port@lcd3 { | ||
909 | fpd_in: endpoint { | ||
910 | remote-endpoint = <&dpi_out3>; | ||
911 | }; | ||
912 | }; | ||
913 | }; | 853 | }; |
914 | }; | 854 | }; |
915 | 855 | ||
@@ -1136,7 +1076,6 @@ i2c_p3_exp: &i2c2 { | |||
1136 | reg = <2>; | 1076 | reg = <2>; |
1137 | 1077 | ||
1138 | dpi_out3: endpoint { | 1078 | dpi_out3: endpoint { |
1139 | remote-endpoint = <&fpd_in>; | ||
1140 | data-lines = <24>; | 1079 | data-lines = <24>; |
1141 | }; | 1080 | }; |
1142 | }; | 1081 | }; |
diff --git a/arch/arm/boot/dts/dra72-evm-common.dtsi b/arch/arm/boot/dts/dra72-evm-common.dtsi index a7a073fac380..1896ef30f673 100644 --- a/arch/arm/boot/dts/dra72-evm-common.dtsi +++ b/arch/arm/boot/dts/dra72-evm-common.dtsi | |||
@@ -16,7 +16,6 @@ | |||
16 | 16 | ||
17 | aliases { | 17 | aliases { |
18 | display0 = &hdmi0; | 18 | display0 = &hdmi0; |
19 | display1 = &fpd_disp; | ||
20 | sound0 = &snd0; | 19 | sound0 = &snd0; |
21 | sound1 = &hdmi; | 20 | sound1 = &hdmi; |
22 | i2c7 = &disp_ser; | 21 | i2c7 = &disp_ser; |
@@ -587,69 +586,13 @@ i2c_p3_exp: &i2c5 { | |||
587 | disp_ser: serializer@1b { | 586 | disp_ser: serializer@1b { |
588 | compatible = "ti,ds90uh925q"; | 587 | compatible = "ti,ds90uh925q"; |
589 | reg = <0x1b>; | 588 | reg = <0x1b>; |
589 | status = "disabled"; | ||
590 | 590 | ||
591 | #address-cells = <1>; | 591 | #address-cells = <1>; |
592 | #size-cells = <0>; | 592 | #size-cells = <0>; |
593 | ranges = <0x2c 0x2c>, | ||
594 | <0x1c 0x1c>; | ||
595 | |||
596 | disp_des: deserializer@2c { | ||
597 | compatible = "ti,ds90uh928q"; | ||
598 | reg = <0x2c>; | ||
599 | slave-mode; | ||
600 | }; | ||
601 | }; | ||
602 | }; | ||
603 | |||
604 | &disp_ser { | ||
605 | fpd_disp: tlc59108@1c { | ||
606 | #address-cells = <1>; | ||
607 | #size-cells = <0>; | ||
608 | compatible = "ti,tlc59108"; | ||
609 | reg = <0x1c>; | ||
610 | |||
611 | }; | 593 | }; |
612 | }; | 594 | }; |
613 | 595 | ||
614 | / { | ||
615 | lcd_fpd: display_fpd { | ||
616 | /* | ||
617 | * This is not really a dpi panel, but panel-dpi driver | ||
618 | * works as dummy panel driver. | ||
619 | */ | ||
620 | compatible = "lg,lp101wx2", "panel-dpi"; | ||
621 | |||
622 | label = "lcd_fpd"; | ||
623 | enable-gpios = <&pcf_gpio_21 0 GPIO_ACTIVE_LOW>; | ||
624 | /* P0, SEL_GPMC_AD_VID_S0 */ | ||
625 | status = "disabled"; | ||
626 | |||
627 | panel-timing { | ||
628 | clock-frequency = <69300404>; | ||
629 | hactive = <1280>; | ||
630 | vactive = <800>; | ||
631 | |||
632 | hfront-porch = <48>; | ||
633 | hback-porch = <44>; | ||
634 | hsync-len = <32>; | ||
635 | |||
636 | vfront-porch = <4>; | ||
637 | vback-porch = <7>; | ||
638 | vsync-len = <12>; | ||
639 | |||
640 | hsync-active = <0>; | ||
641 | vsync-active = <0>; | ||
642 | de-active = <1>; | ||
643 | pixelclk-active = <0>; | ||
644 | }; | ||
645 | |||
646 | port@lcd3 { | ||
647 | fpd_in: endpoint { | ||
648 | remote-endpoint = <&dpi_out3>; | ||
649 | }; | ||
650 | }; | ||
651 | }; | ||
652 | }; | ||
653 | 596 | ||
654 | &dss { | 597 | &dss { |
655 | status = "ok"; | 598 | status = "ok"; |
@@ -663,7 +606,6 @@ i2c_p3_exp: &i2c5 { | |||
663 | reg = <2>; | 606 | reg = <2>; |
664 | 607 | ||
665 | dpi_out3: endpoint { | 608 | dpi_out3: endpoint { |
666 | remote-endpoint = <&fpd_in>; | ||
667 | data-lines = <24>; | 609 | data-lines = <24>; |
668 | }; | 610 | }; |
669 | }; | 611 | }; |
diff --git a/arch/arm/boot/dts/dra72-evm-fpd-lg.dts b/arch/arm/boot/dts/dra72-evm-fpd-lg.dts new file mode 100644 index 000000000000..9ed0f66fdb76 --- /dev/null +++ b/arch/arm/boot/dts/dra72-evm-fpd-lg.dts | |||
@@ -0,0 +1,39 @@ | |||
1 | #include "dra72-evm.dts" | ||
2 | #include "dra7x-evm-fpd-lg.dtsi" | ||
3 | |||
4 | /* Set display aliases for use by Android */ | ||
5 | / { | ||
6 | aliases { | ||
7 | display0 = &fpd_disp; | ||
8 | display1 = &hdmi0; | ||
9 | }; | ||
10 | }; | ||
11 | |||
12 | &dss { | ||
13 | ports { | ||
14 | status = "ok"; | ||
15 | }; | ||
16 | }; | ||
17 | |||
18 | &disp_ser { | ||
19 | status = "ok"; | ||
20 | ranges = <0x2c 0x2c>, | ||
21 | <0x1c 0x1c>; | ||
22 | }; | ||
23 | |||
24 | /* Tie the end points of DSS and FPDLink together */ | ||
25 | |||
26 | &fpd_in { | ||
27 | remote-endpoint = <&dpi_out3>; | ||
28 | }; | ||
29 | |||
30 | &dpi_out3 { | ||
31 | remote-endpoint = <&fpd_in>; | ||
32 | }; | ||
33 | |||
34 | &lcd_fpd { | ||
35 | enable-gpios = <&pcf_gpio_21 0 GPIO_ACTIVE_LOW>; | ||
36 | /* P0, SEL_GPMC_AD_VID_S0 */ | ||
37 | |||
38 | status = "ok"; | ||
39 | }; | ||
diff --git a/arch/arm/boot/dts/dra72-evm.dts b/arch/arm/boot/dts/dra72-evm.dts index 73ac6c98771f..cc108d2f9b09 100644 --- a/arch/arm/boot/dts/dra72-evm.dts +++ b/arch/arm/boot/dts/dra72-evm.dts | |||
@@ -11,7 +11,6 @@ | |||
11 | 11 | ||
12 | aliases { | 12 | aliases { |
13 | display0 = &hdmi0; | 13 | display0 = &hdmi0; |
14 | display1 = &fpd_disp; | ||
15 | sound1 = &hdmi; | 14 | sound1 = &hdmi; |
16 | i2c7 = &disp_ser; | 15 | i2c7 = &disp_ser; |
17 | }; | 16 | }; |
diff --git a/arch/arm/boot/dts/dra76-evm-fpd-auo-g101evn01.0.dts b/arch/arm/boot/dts/dra76-evm-fpd-auo-g101evn01.0.dts new file mode 100644 index 000000000000..69983d70d1f4 --- /dev/null +++ b/arch/arm/boot/dts/dra76-evm-fpd-auo-g101evn01.0.dts | |||
@@ -0,0 +1,67 @@ | |||
1 | #include "dra76-evm.dts" | ||
2 | #include "dra7x-evm-fpd-auo-g101evn01.0.dtsi" | ||
3 | |||
4 | / { | ||
5 | aliases { | ||
6 | display0 = &fpd_disp; | ||
7 | display1 = &hdmi0; | ||
8 | }; | ||
9 | }; | ||
10 | |||
11 | &dss { | ||
12 | ports { | ||
13 | status = "ok"; | ||
14 | }; | ||
15 | }; | ||
16 | |||
17 | &disp_ser { | ||
18 | status = "ok"; | ||
19 | ranges = <0x0 0x2d>; | ||
20 | }; | ||
21 | |||
22 | /* Tie the end points of DSS and FPDLink together */ | ||
23 | &fpd_in { | ||
24 | remote-endpoint = <&dpi_out3>; | ||
25 | }; | ||
26 | |||
27 | &dpi_out3 { | ||
28 | remote-endpoint = <&fpd_in>; | ||
29 | }; | ||
30 | |||
31 | &lcd_fpd { | ||
32 | status = "ok"; | ||
33 | }; | ||
34 | |||
35 | /* U21 on the EVM */ | ||
36 | /* gpmc_ad_vid_s0: high: GPMC , low: VOUT3 */ | ||
37 | &pcf_gpio_21 { | ||
38 | p0 { | ||
39 | gpio-hog; | ||
40 | gpios = <0 GPIO_ACTIVE_HIGH>; | ||
41 | output-low; | ||
42 | line-name = "gpmc_ad_vid_s0"; | ||
43 | }; | ||
44 | }; | ||
45 | |||
46 | |||
47 | /* U110 on the EVM. For Rev A boards */ | ||
48 | /* | ||
49 | &pcf_hdmi { | ||
50 | p11 { | ||
51 | gpio-hog; | ||
52 | gpios = <11 GPIO_ACTIVE_HIGH>; | ||
53 | output-low; | ||
54 | line-name = "disp1_vpoc_onn"; | ||
55 | }; | ||
56 | }; | ||
57 | */ | ||
58 | |||
59 | /* For supplying power to the display via FPDLink */ | ||
60 | &gpio2 { | ||
61 | p2 { | ||
62 | gpio-hog; | ||
63 | gpios = <2 GPIO_ACTIVE_HIGH>; | ||
64 | output-low; | ||
65 | line-name = "disp1_vpoc_onn"; | ||
66 | }; | ||
67 | }; | ||
diff --git a/arch/arm/boot/dts/dra76-evm.dts b/arch/arm/boot/dts/dra76-evm.dts index f0c7666649c1..946a9a69038b 100644 --- a/arch/arm/boot/dts/dra76-evm.dts +++ b/arch/arm/boot/dts/dra76-evm.dts | |||
@@ -54,6 +54,10 @@ | |||
54 | }; | 54 | }; |
55 | }; | 55 | }; |
56 | 56 | ||
57 | aliases { | ||
58 | i2c7 = &disp_ser; | ||
59 | }; | ||
60 | |||
57 | vsys_12v0: fixedregulator-vsys12v0 { | 61 | vsys_12v0: fixedregulator-vsys12v0 { |
58 | /* main supply */ | 62 | /* main supply */ |
59 | compatible = "regulator-fixed"; | 63 | compatible = "regulator-fixed"; |
@@ -474,9 +478,35 @@ | |||
474 | phy-supply = <&ldo3_reg>; | 478 | phy-supply = <&ldo3_reg>; |
475 | }; | 479 | }; |
476 | 480 | ||
481 | &i2c3 { | ||
482 | disp_ser: serializer@0c { | ||
483 | compatible = "ti,ds90ub921q"; | ||
484 | reg = <0x0c>; | ||
485 | |||
486 | #address-cells = <1>; | ||
487 | #size-cells = <0>; | ||
488 | status = "disabled"; | ||
489 | }; | ||
490 | }; | ||
491 | |||
477 | &dss { | 492 | &dss { |
478 | status = "ok"; | 493 | status = "ok"; |
479 | vdda_video-supply = <&ldo5_reg>; | 494 | vdda_video-supply = <&ldo5_reg>; |
495 | |||
496 | ports { | ||
497 | #address-cells = <1>; | ||
498 | #size-cells = <0>; | ||
499 | |||
500 | status = "disabled"; | ||
501 | |||
502 | port@lcd3 { | ||
503 | reg = <2>; | ||
504 | |||
505 | dpi_out3: endpoint { | ||
506 | data-lines = <24>; | ||
507 | }; | ||
508 | }; | ||
509 | }; | ||
480 | }; | 510 | }; |
481 | 511 | ||
482 | &hdmi { | 512 | &hdmi { |
diff --git a/arch/arm/boot/dts/dra7x-evm-fpd-auo-g101evn01.0.dtsi b/arch/arm/boot/dts/dra7x-evm-fpd-auo-g101evn01.0.dtsi new file mode 100644 index 000000000000..c928be92c1ac --- /dev/null +++ b/arch/arm/boot/dts/dra7x-evm-fpd-auo-g101evn01.0.dtsi | |||
@@ -0,0 +1,107 @@ | |||
1 | /* | ||
2 | * Copyright (C) 2017 Texas Instruments Incorporated - http://www.ti.com/ | ||
3 | * | ||
4 | * This program is free software; you can redistribute it and/or modify | ||
5 | * it under the terms of the GNU General Public License version 2 as | ||
6 | * published by the Free Software Foundation. | ||
7 | */ | ||
8 | |||
9 | / { | ||
10 | backlight { | ||
11 | compatible = "led-backlight"; | ||
12 | leds = <&backlight_led>; | ||
13 | brightness-levels = <0 2 38 74 110 146 182 218 255>; | ||
14 | default-brightness-level = <8>; | ||
15 | |||
16 | enable-gpios = <&pcf_display_board 0 GPIO_ACTIVE_LOW>; | ||
17 | }; | ||
18 | |||
19 | lcd_fpd: display { | ||
20 | compatible = "auo,g101evn01.0", "panel-dpi"; | ||
21 | |||
22 | label = "lcd_fpd"; | ||
23 | status = "disabled"; | ||
24 | |||
25 | panel-timing { | ||
26 | clock-frequency = <68930000>; | ||
27 | hactive = <1280>; | ||
28 | vactive = <800>; | ||
29 | |||
30 | hfront-porch = <48>; | ||
31 | hsync-len = <32>; | ||
32 | hback-porch = <48>; | ||
33 | |||
34 | vfront-porch = <4>; | ||
35 | vsync-len = <4>; | ||
36 | vback-porch = <8>; | ||
37 | |||
38 | hsync-active = <0>; | ||
39 | vsync-active = <0>; | ||
40 | de-active = <1>; | ||
41 | pixelclk-active = <1>; | ||
42 | }; | ||
43 | |||
44 | port { | ||
45 | fpd_in: endpoint { | ||
46 | }; | ||
47 | }; | ||
48 | }; | ||
49 | }; | ||
50 | |||
51 | &disp_ser { | ||
52 | |||
53 | /* | ||
54 | * 0x2c - deserializer | ||
55 | * 0x40 - TLC59108 | ||
56 | * 0x27 - PCF8575 | ||
57 | * 0x57 - EEPROM | ||
58 | * 0x14 - Goodix Touch Controller | ||
59 | * 0x28 - RF430CL330H | ||
60 | */ | ||
61 | |||
62 | disp_des: deserializer@2c { | ||
63 | #address-cells = <1>; | ||
64 | #size-cells = <0>; | ||
65 | compatible = "ti,ds90ub924q"; | ||
66 | reg = <0x2c>; | ||
67 | slave-mode; | ||
68 | }; | ||
69 | |||
70 | /* TLC chip for LCD panel power and backlight */ | ||
71 | fpd_disp: tlc59108@40 { | ||
72 | #address-cells = <1>; | ||
73 | #size-cells = <0>; | ||
74 | compatible = "ti,tlc59108"; | ||
75 | reg = <0x40>; | ||
76 | |||
77 | backlight_led: bl@2 { | ||
78 | label = "backlight"; | ||
79 | reg = <0x2>; | ||
80 | }; | ||
81 | }; | ||
82 | |||
83 | pcf_display_board: gpio@27 { | ||
84 | compatible = "nxp,pcf8575"; | ||
85 | reg = <0x27>; | ||
86 | gpio-controller; | ||
87 | #gpio-cells = <2>; | ||
88 | }; | ||
89 | |||
90 | touchscreen: goodix-gt9271@14 { | ||
91 | status = "okay"; | ||
92 | compatible = "goodix,gt9271"; | ||
93 | reg = <0x14>; | ||
94 | |||
95 | touchscreen-size-x = <1280>; | ||
96 | touchscreen-size-y = <800>; | ||
97 | touchscreen-inverted-y; | ||
98 | |||
99 | /* Reset gpio line is inverted before going to touch panel */ | ||
100 | reset-gpios = <&pcf_display_board 5 GPIO_ACTIVE_LOW>; | ||
101 | irq-gpios = <&pcf_display_board 6 GPIO_ACTIVE_HIGH>; | ||
102 | }; | ||
103 | |||
104 | /* Below two slaves on the I2C bus are not yet defined */ | ||
105 | /* ID EEPROM 0x57 */ | ||
106 | /* RF430CL330H 0x28 */ | ||
107 | }; | ||
diff --git a/arch/arm/boot/dts/dra7x-evm-fpd-lg.dtsi b/arch/arm/boot/dts/dra7x-evm-fpd-lg.dtsi new file mode 100644 index 000000000000..b4760b4efdad --- /dev/null +++ b/arch/arm/boot/dts/dra7x-evm-fpd-lg.dtsi | |||
@@ -0,0 +1,59 @@ | |||
1 | /* | ||
2 | * Copyright (C) 2017 Texas Instruments Incorporated - http://www.ti.com/ | ||
3 | * | ||
4 | * This program is free software; you can redistribute it and/or modify | ||
5 | * it under the terms of the GNU General Public License version 2 as | ||
6 | * published by the Free Software Foundation. | ||
7 | */ | ||
8 | |||
9 | #include <dt-bindings/gpio/gpio.h> | ||
10 | |||
11 | |||
12 | / { | ||
13 | lcd_fpd: display_fpd { | ||
14 | /* | ||
15 | * This is not really a dpi panel, but panel-dpi driver | ||
16 | * works as dummy panel driver. | ||
17 | */ | ||
18 | compatible = "lg,lp101wx2", "panel-dpi"; | ||
19 | |||
20 | label = "lcd_fpd"; | ||
21 | status = "disabled"; | ||
22 | |||
23 | panel-timing { | ||
24 | clock-frequency = <69300404>; | ||
25 | hactive = <1280>; | ||
26 | vactive = <800>; | ||
27 | |||
28 | hfront-porch = <48>; | ||
29 | hback-porch = <44>; | ||
30 | hsync-len = <32>; | ||
31 | |||
32 | vfront-porch = <4>; | ||
33 | vback-porch = <7>; | ||
34 | vsync-len = <12>; | ||
35 | |||
36 | hsync-active = <0>; | ||
37 | vsync-active = <0>; | ||
38 | de-active = <1>; | ||
39 | pixelclk-active = <0>; | ||
40 | }; | ||
41 | |||
42 | port { | ||
43 | fpd_in: endpoint { | ||
44 | }; | ||
45 | }; | ||
46 | }; | ||
47 | }; | ||
48 | |||
49 | &disp_ser { | ||
50 | disp_des: deserializer@2c { | ||
51 | compatible = "ti,ds90uh928q"; | ||
52 | reg = <0x2c>; | ||
53 | slave-mode; | ||
54 | }; | ||
55 | fpd_disp: tlc59108@1c { | ||
56 | compatible = "ti,tlc59108"; | ||
57 | reg = <0x1c>; | ||
58 | }; | ||
59 | }; | ||
diff --git a/arch/arm/boot/dts/dra7x-evm-lcd-lg.dtsi b/arch/arm/boot/dts/dra7x-evm-lcd-lg.dtsi index 52a957d08cf2..23268b7a474f 100644 --- a/arch/arm/boot/dts/dra7x-evm-lcd-lg.dtsi +++ b/arch/arm/boot/dts/dra7x-evm-lcd-lg.dtsi | |||
@@ -12,7 +12,6 @@ | |||
12 | aliases { | 12 | aliases { |
13 | display0 = &tlc59108; | 13 | display0 = &tlc59108; |
14 | display1 = &hdmi0; | 14 | display1 = &hdmi0; |
15 | display2 = &fpd_disp; | ||
16 | }; | 15 | }; |
17 | 16 | ||
18 | backlight { | 17 | backlight { |
diff --git a/arch/arm/boot/dts/dra7x-evm-lcd-osd.dtsi b/arch/arm/boot/dts/dra7x-evm-lcd-osd.dtsi index 219e4f953797..7dc9c986a73a 100644 --- a/arch/arm/boot/dts/dra7x-evm-lcd-osd.dtsi +++ b/arch/arm/boot/dts/dra7x-evm-lcd-osd.dtsi | |||
@@ -10,7 +10,6 @@ | |||
10 | aliases { | 10 | aliases { |
11 | display0 = &lcd; | 11 | display0 = &lcd; |
12 | display1 = &hdmi0; | 12 | display1 = &hdmi0; |
13 | display2 = &fpd_disp; | ||
14 | }; | 13 | }; |
15 | 14 | ||
16 | lcd_bl: backlight { | 15 | lcd_bl: backlight { |
diff --git a/drivers/input/touchscreen/Kconfig b/drivers/input/touchscreen/Kconfig index 8364d84fd696..97f1eacdda0e 100644 --- a/drivers/input/touchscreen/Kconfig +++ b/drivers/input/touchscreen/Kconfig | |||
@@ -325,6 +325,7 @@ config TOUCHSCREEN_GOODIX | |||
325 | tristate "Goodix I2C touchscreen" | 325 | tristate "Goodix I2C touchscreen" |
326 | depends on I2C | 326 | depends on I2C |
327 | depends on GPIOLIB | 327 | depends on GPIOLIB |
328 | select INPUT_POLLDEV | ||
328 | help | 329 | help |
329 | Say Y here if you have the Goodix touchscreen (such as one | 330 | Say Y here if you have the Goodix touchscreen (such as one |
330 | installed in Onda v975w tablets) connected to your | 331 | installed in Onda v975w tablets) connected to your |
diff --git a/drivers/input/touchscreen/goodix.c b/drivers/input/touchscreen/goodix.c index a27f0d7107af..916c9877261f 100644 --- a/drivers/input/touchscreen/goodix.c +++ b/drivers/input/touchscreen/goodix.c | |||
@@ -22,6 +22,7 @@ | |||
22 | #include <linux/i2c.h> | 22 | #include <linux/i2c.h> |
23 | #include <linux/input.h> | 23 | #include <linux/input.h> |
24 | #include <linux/input/mt.h> | 24 | #include <linux/input/mt.h> |
25 | #include <linux/input-polldev.h> | ||
25 | #include <linux/module.h> | 26 | #include <linux/module.h> |
26 | #include <linux/delay.h> | 27 | #include <linux/delay.h> |
27 | #include <linux/irq.h> | 28 | #include <linux/irq.h> |
@@ -34,6 +35,7 @@ | |||
34 | struct goodix_ts_data { | 35 | struct goodix_ts_data { |
35 | struct i2c_client *client; | 36 | struct i2c_client *client; |
36 | struct input_dev *input_dev; | 37 | struct input_dev *input_dev; |
38 | struct input_polled_dev *poll_dev; | ||
37 | int abs_x_max; | 39 | int abs_x_max; |
38 | int abs_y_max; | 40 | int abs_y_max; |
39 | bool swapped_x_y; | 41 | bool swapped_x_y; |
@@ -77,6 +79,8 @@ struct goodix_ts_data { | |||
77 | #define MAX_CONTACTS_LOC 5 | 79 | #define MAX_CONTACTS_LOC 5 |
78 | #define TRIGGER_LOC 6 | 80 | #define TRIGGER_LOC 6 |
79 | 81 | ||
82 | #define TSC_DEFAULT_POLL_PERIOD 30 /* ms */ | ||
83 | |||
80 | static const unsigned long goodix_irq_flags[] = { | 84 | static const unsigned long goodix_irq_flags[] = { |
81 | IRQ_TYPE_EDGE_RISING, | 85 | IRQ_TYPE_EDGE_RISING, |
82 | IRQ_TYPE_EDGE_FALLING, | 86 | IRQ_TYPE_EDGE_FALLING, |
@@ -281,6 +285,20 @@ static void goodix_process_events(struct goodix_ts_data *ts) | |||
281 | input_sync(ts->input_dev); | 285 | input_sync(ts->input_dev); |
282 | } | 286 | } |
283 | 287 | ||
288 | static void _goodix_process_events(struct goodix_ts_data *ts) | ||
289 | { | ||
290 | goodix_process_events(ts); | ||
291 | |||
292 | if (goodix_i2c_write_u8(ts->client, GOODIX_READ_COOR_ADDR, 0) < 0) | ||
293 | dev_err(&ts->client->dev, "I2C write end_cmd error\n"); | ||
294 | |||
295 | } | ||
296 | static void goodix_poll(struct input_polled_dev *poll_dev) | ||
297 | { | ||
298 | struct goodix_ts_data *ts = poll_dev->private; | ||
299 | |||
300 | _goodix_process_events(ts); | ||
301 | } | ||
284 | /** | 302 | /** |
285 | * goodix_ts_irq_handler - The IRQ handler | 303 | * goodix_ts_irq_handler - The IRQ handler |
286 | * | 304 | * |
@@ -291,10 +309,7 @@ static irqreturn_t goodix_ts_irq_handler(int irq, void *dev_id) | |||
291 | { | 309 | { |
292 | struct goodix_ts_data *ts = dev_id; | 310 | struct goodix_ts_data *ts = dev_id; |
293 | 311 | ||
294 | goodix_process_events(ts); | 312 | _goodix_process_events(ts); |
295 | |||
296 | if (goodix_i2c_write_u8(ts->client, GOODIX_READ_COOR_ADDR, 0) < 0) | ||
297 | dev_err(&ts->client->dev, "I2C write end_cmd error\n"); | ||
298 | 313 | ||
299 | return IRQ_HANDLED; | 314 | return IRQ_HANDLED; |
300 | } | 315 | } |
@@ -614,6 +629,58 @@ static int goodix_request_input_dev(struct goodix_ts_data *ts) | |||
614 | return 0; | 629 | return 0; |
615 | } | 630 | } |
616 | 631 | ||
632 | static int goodix_request_input_polled_dev(struct goodix_ts_data *ts) | ||
633 | { | ||
634 | int error; | ||
635 | struct input_polled_dev *poll_dev; | ||
636 | |||
637 | dev_err(&ts->client->dev, "Setting up polling.\n"); | ||
638 | poll_dev = input_allocate_polled_device(); | ||
639 | if (!poll_dev) { | ||
640 | dev_err(&ts->client->dev, "Failed to allocate polled input device.\n"); | ||
641 | error = -ENOMEM; | ||
642 | return error; | ||
643 | } | ||
644 | |||
645 | ts->poll_dev = poll_dev; | ||
646 | |||
647 | poll_dev->private = ts; | ||
648 | poll_dev->poll = goodix_poll; | ||
649 | poll_dev->poll_interval = TSC_DEFAULT_POLL_PERIOD; | ||
650 | |||
651 | ts->input_dev = poll_dev->input; | ||
652 | if (!ts->input_dev) { | ||
653 | dev_err(&ts->client->dev, "Failed to allocate input device."); | ||
654 | return -ENOMEM; | ||
655 | } | ||
656 | |||
657 | input_set_abs_params(ts->input_dev, ABS_MT_POSITION_X, | ||
658 | 0, ts->abs_x_max, 0, 0); | ||
659 | input_set_abs_params(ts->input_dev, ABS_MT_POSITION_Y, | ||
660 | 0, ts->abs_y_max, 0, 0); | ||
661 | input_set_abs_params(ts->input_dev, ABS_MT_WIDTH_MAJOR, 0, 255, 0, 0); | ||
662 | input_set_abs_params(ts->input_dev, ABS_MT_TOUCH_MAJOR, 0, 255, 0, 0); | ||
663 | |||
664 | input_mt_init_slots(ts->input_dev, ts->max_touch_num, | ||
665 | INPUT_MT_DIRECT | INPUT_MT_DROP_UNUSED); | ||
666 | |||
667 | ts->input_dev->name = "Goodix Capacitive TouchScreen"; | ||
668 | ts->input_dev->phys = "input/ts"; | ||
669 | ts->input_dev->id.bustype = BUS_I2C; | ||
670 | ts->input_dev->id.vendor = 0x0416; | ||
671 | ts->input_dev->id.product = ts->id; | ||
672 | ts->input_dev->id.version = ts->version; | ||
673 | |||
674 | error = input_register_polled_device(poll_dev); | ||
675 | if (error) { | ||
676 | dev_err(&ts->client->dev, | ||
677 | "Failed to register input device: %d", error); | ||
678 | return error; | ||
679 | } | ||
680 | |||
681 | return 0; | ||
682 | } | ||
683 | |||
617 | /** | 684 | /** |
618 | * goodix_configure_dev - Finish device initialization | 685 | * goodix_configure_dev - Finish device initialization |
619 | * | 686 | * |
@@ -637,15 +704,23 @@ static int goodix_configure_dev(struct goodix_ts_data *ts) | |||
637 | 704 | ||
638 | goodix_read_config(ts); | 705 | goodix_read_config(ts); |
639 | 706 | ||
640 | error = goodix_request_input_dev(ts); | 707 | if (ts->client->irq) { |
641 | if (error) | 708 | error = goodix_request_input_dev(ts); |
642 | return error; | 709 | if (error) |
710 | return error; | ||
711 | ts->irq_flags = goodix_irq_flags[ts->int_trigger_type] | | ||
712 | IRQF_ONESHOT; | ||
713 | error = goodix_request_irq(ts); | ||
714 | if (error) { | ||
715 | dev_err(&ts->client->dev, "request IRQ failed: %d\n", | ||
716 | error); | ||
717 | return error; | ||
718 | } | ||
719 | } else { | ||
720 | /* setup polling if IRQ is not defined */ | ||
721 | |||
722 | error = goodix_request_input_polled_dev(ts); | ||
643 | 723 | ||
644 | ts->irq_flags = goodix_irq_flags[ts->int_trigger_type] | IRQF_ONESHOT; | ||
645 | error = goodix_request_irq(ts); | ||
646 | if (error) { | ||
647 | dev_err(&ts->client->dev, "request IRQ failed: %d\n", error); | ||
648 | return error; | ||
649 | } | 724 | } |
650 | 725 | ||
651 | return 0; | 726 | return 0; |
diff --git a/drivers/video/serdes/fpd3_i2c_adap.c b/drivers/video/serdes/fpd3_i2c_adap.c index 136c29c10956..8cc866fc1221 100644 --- a/drivers/video/serdes/fpd3_i2c_adap.c +++ b/drivers/video/serdes/fpd3_i2c_adap.c | |||
@@ -100,8 +100,10 @@ static int fpd3_serdes_setup_aliases(struct i2c_client *client) | |||
100 | count++; | 100 | count++; |
101 | } | 101 | } |
102 | 102 | ||
103 | if (count >= FPD3_MAX_POLL_COUNT) | 103 | if (count >= FPD3_MAX_POLL_COUNT) { |
104 | dev_err(&client->dev, "Unable to sync with remote slave"); | ||
104 | return -EIO; | 105 | return -EIO; |
106 | } | ||
105 | 107 | ||
106 | dev_dbg(&client->dev, "Remote signal detected"); | 108 | dev_dbg(&client->dev, "Remote signal detected"); |
107 | return 0; | 109 | return 0; |
@@ -197,38 +199,36 @@ static int fpd3_master_xfer(struct i2c_adapter *adap, | |||
197 | struct i2c_msg msgs[], int num) | 199 | struct i2c_msg msgs[], int num) |
198 | { | 200 | { |
199 | struct i2c_adapter *alias_adap; | 201 | struct i2c_adapter *alias_adap; |
200 | struct i2c_msg new_msg; | 202 | struct i2c_msg *new_msg; |
201 | u8 alias_addr; | 203 | u8 alias_addr; |
202 | int i, ret = 0; | 204 | int i, ret = 0; |
203 | int num_tred = 0; | ||
204 | 205 | ||
205 | if (setup_link(adap)) | 206 | if (setup_link(adap)) |
206 | return -EIO; | 207 | return -EIO; |
207 | 208 | ||
208 | alias_adap = __get_alias_adapter(adap); | 209 | alias_adap = __get_alias_adapter(adap); |
209 | 210 | ||
211 | new_msg = kcalloc(num, sizeof(*new_msg), GFP_KERNEL); | ||
212 | |||
210 | for (i = 0; i < num; i++) { | 213 | for (i = 0; i < num; i++) { |
211 | alias_addr = __get_alias_addr(adap, msgs[i].addr); | 214 | alias_addr = __get_alias_addr(adap, msgs[i].addr); |
212 | if (alias_addr == 0) { | 215 | if (alias_addr == 0) { |
213 | ret = -EINVAL; | 216 | ret = -EINVAL; |
214 | break; | 217 | goto cleanup; |
215 | } | 218 | } |
216 | 219 | ||
217 | /* Copy the i2c_msgs into temporary buffer; xlate address */ | 220 | /* Copy the i2c_msgs into temporary buffer; xlate address */ |
218 | new_msg = msgs[i]; | 221 | new_msg[i] = msgs[i]; |
219 | new_msg.addr = alias_addr; | 222 | new_msg[i].addr = alias_addr; |
220 | /* Issue the messages on the alias adapter */ | ||
221 | ret = i2c_transfer(alias_adap, &new_msg, 1); | ||
222 | if (ret < 0) | ||
223 | break; | ||
224 | else | ||
225 | num_tred++; | ||
226 | } | 223 | } |
227 | 224 | ||
228 | if (ret < 0) | 225 | /* Issue the messages on the alias adapter */ |
229 | return ret; | 226 | ret = i2c_transfer(alias_adap, new_msg, num); |
230 | else | 227 | |
231 | return num_tred; | 228 | cleanup: |
229 | kfree(new_msg); | ||
230 | |||
231 | return ret; | ||
232 | } | 232 | } |
233 | 233 | ||
234 | static int fpd3_smbus_xfer(struct i2c_adapter *adap, u16 addr, | 234 | static int fpd3_smbus_xfer(struct i2c_adapter *adap, u16 addr, |
diff --git a/drivers/video/serdes/fpd3_serdes.c b/drivers/video/serdes/fpd3_serdes.c index 90de8d559f2f..3598683a3d31 100644 --- a/drivers/video/serdes/fpd3_serdes.c +++ b/drivers/video/serdes/fpd3_serdes.c | |||
@@ -23,6 +23,8 @@ | |||
23 | * DS90UB913aq/DS90UB914aq http://www.ti.com/lit/ds/snls443a/snls443a.pdf | 23 | * DS90UB913aq/DS90UB914aq http://www.ti.com/lit/ds/snls443a/snls443a.pdf |
24 | * DS90UH925Q http://www.ti.com/lit/ds/symlink/ds90uh925q-q1.pdf | 24 | * DS90UH925Q http://www.ti.com/lit/ds/symlink/ds90uh925q-q1.pdf |
25 | * DS90UH928Q http://www.ti.com/lit/ds/snls440a/snls440a.pdf | 25 | * DS90UH928Q http://www.ti.com/lit/ds/snls440a/snls440a.pdf |
26 | * DS90UB924Q http://www.ti.com/lit/ds/snls512/snls512.pdf | ||
27 | * DS90UB921Q http://www.ti.com/lit/ds/symlink/ds90ub921-q1.pdf | ||
26 | * | 28 | * |
27 | * Documentation:- | 29 | * Documentation:- |
28 | * -> Documentation/video-serdes.txt | 30 | * -> Documentation/video-serdes.txt |
@@ -78,6 +80,20 @@ static const unsigned int fpd3_24bit_des_init[] = { | |||
78 | FPD3_DES_CONFIG1, 0x4c, | 80 | FPD3_DES_CONFIG1, 0x4c, |
79 | }; | 81 | }; |
80 | 82 | ||
83 | static const unsigned int fpd3_921_ser_init[] = { | ||
84 | /* Reset entire digital block except registers */ | ||
85 | FPD3_SER_RESET, 0x01, | ||
86 | /* back chan en, auto ack WR, i2c passthrough, rising edge pclk */ | ||
87 | FPD3_SER_CONFIG1, 0x8b, | ||
88 | }; | ||
89 | |||
90 | static const unsigned int fpd3_924_des_init[] = { | ||
91 | /* digital reset1 */ | ||
92 | FPD3_DES_RESET, 0x02, | ||
93 | /* back channel en */ | ||
94 | FPD3_DES_RESET, 0x04, | ||
95 | }; | ||
96 | |||
81 | static struct fpd3_serdes_platform_data fpd3_serdes_pdata[] = { | 97 | static struct fpd3_serdes_platform_data fpd3_serdes_pdata[] = { |
82 | { | 98 | { |
83 | .name = "fpd3_12b_ser", | 99 | .name = "fpd3_12b_ser", |
@@ -119,6 +135,26 @@ static struct fpd3_serdes_platform_data fpd3_serdes_pdata[] = { | |||
119 | .init_seq = fpd3_24bit_des_init, | 135 | .init_seq = fpd3_24bit_des_init, |
120 | .init_len = ARRAY_SIZE(fpd3_24bit_des_init), | 136 | .init_len = ARRAY_SIZE(fpd3_24bit_des_init), |
121 | }, | 137 | }, |
138 | { | ||
139 | .name = "fpd3_924_des", | ||
140 | .dev_type = FPD3_DES_DEV, | ||
141 | .ngpio = 4, | ||
142 | .nslaves = 8, | ||
143 | .device_id = 0x58, | ||
144 | .gpio_2reg = 2 * FPD3_DES_GPIO_01 + 1, | ||
145 | .init_seq = fpd3_924_des_init, | ||
146 | .init_len = ARRAY_SIZE(fpd3_924_des_init), | ||
147 | }, | ||
148 | { | ||
149 | .name = "fpd3_921_ser", | ||
150 | .dev_type = FPD3_SER_DEV, | ||
151 | .ngpio = 4, | ||
152 | .nslaves = 1, | ||
153 | .device_id = 0x18, | ||
154 | .gpio_2reg = 2 * FPD3_SER_GPIO_01 + 1, | ||
155 | .init_seq = fpd3_921_ser_init, | ||
156 | .init_len = ARRAY_SIZE(fpd3_921_ser_init), | ||
157 | }, | ||
122 | }; | 158 | }; |
123 | 159 | ||
124 | /* GPIO operations */ | 160 | /* GPIO operations */ |
@@ -309,6 +345,8 @@ static const struct i2c_device_id fpd3_serdes_i2c_ids[] = { | |||
309 | { "ds90ub914aq", 8 }, | 345 | { "ds90ub914aq", 8 }, |
310 | { "ds90uh925q", 8 }, | 346 | { "ds90uh925q", 8 }, |
311 | { "ds90uh928q", 8 }, | 347 | { "ds90uh928q", 8 }, |
348 | { "ds90ub924q", 8 }, | ||
349 | { "ds90ub921q", 8 }, | ||
312 | { } | 350 | { } |
313 | }; | 351 | }; |
314 | MODULE_DEVICE_TABLE(i2c, fpd3_serdes_i2c_ids); | 352 | MODULE_DEVICE_TABLE(i2c, fpd3_serdes_i2c_ids); |
@@ -318,6 +356,8 @@ static const struct of_device_id fpd3_serdes_dt_ids[] = { | |||
318 | {.compatible = "ti,ds90ub914aq", &fpd3_serdes_pdata[1], }, | 356 | {.compatible = "ti,ds90ub914aq", &fpd3_serdes_pdata[1], }, |
319 | {.compatible = "ti,ds90uh925q", &fpd3_serdes_pdata[2], }, | 357 | {.compatible = "ti,ds90uh925q", &fpd3_serdes_pdata[2], }, |
320 | {.compatible = "ti,ds90uh928q", &fpd3_serdes_pdata[3], }, | 358 | {.compatible = "ti,ds90uh928q", &fpd3_serdes_pdata[3], }, |
359 | {.compatible = "ti,ds90ub924q", &fpd3_serdes_pdata[4], }, | ||
360 | {.compatible = "ti,ds90ub921q", &fpd3_serdes_pdata[5], }, | ||
321 | { } | 361 | { } |
322 | }; | 362 | }; |
323 | 363 | ||