aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--drivers/media/common/ir-keymaps.c194
-rw-r--r--drivers/media/video/bttv-input.c2
-rw-r--r--drivers/media/video/cx88/cx88-input.c7
-rw-r--r--drivers/media/video/saa7134/saa7134-input.c6
-rw-r--r--include/media/ir-common.h6
5 files changed, 49 insertions, 166 deletions
diff --git a/drivers/media/common/ir-keymaps.c b/drivers/media/common/ir-keymaps.c
index 468f66013393..a294d5c2c73f 100644
--- a/drivers/media/common/ir-keymaps.c
+++ b/drivers/media/common/ir-keymaps.c
@@ -32,50 +32,6 @@ IR_KEYTAB_TYPE ir_codes_empty[IR_KEYTAB_SIZE] = {
32 32
33EXPORT_SYMBOL_GPL(ir_codes_empty); 33EXPORT_SYMBOL_GPL(ir_codes_empty);
34 34
35IR_KEYTAB_TYPE ir_codes_avermedia[IR_KEYTAB_SIZE] = {
36 [ 0x22 ] = KEY_0,
37 [ 0x28 ] = KEY_1,
38 [ 0x18 ] = KEY_2,
39 [ 0x38 ] = KEY_3,
40 [ 0x24 ] = KEY_4,
41 [ 0x14 ] = KEY_5,
42 [ 0x34 ] = KEY_6,
43 [ 0x2c ] = KEY_7,
44 [ 0x1c ] = KEY_8,
45 [ 0x3c ] = KEY_9,
46
47 [ 0x30 ] = KEY_EJECTCD, // Unmarked on my controller
48 [ 0x00 ] = KEY_POWER,
49 [ 0x12 ] = BTN_LEFT, // DISPLAY/L
50 [ 0x32 ] = BTN_RIGHT, // LOOP/R
51 [ 0x0a ] = KEY_MUTE,
52 [ 0x26 ] = KEY_RECORD,
53 [ 0x16 ] = KEY_PAUSE,
54 [ 0x36 ] = KEY_STOP,
55 [ 0x1e ] = KEY_VOLUMEDOWN,
56 [ 0x3e ] = KEY_VOLUMEUP,
57
58 [ 0x20 ] = KEY_TUNER, // TV/FM
59 [ 0x10 ] = KEY_CD,
60 [ 0x08 ] = KEY_VIDEO,
61 [ 0x04 ] = KEY_AUDIO,
62 [ 0x0c ] = KEY_ZOOM, // full screen
63 [ 0x02 ] = KEY_INFO, // preview
64 [ 0x2a ] = KEY_SEARCH, // autoscan
65 [ 0x1a ] = KEY_STOP, // freeze
66 [ 0x3a ] = KEY_RECORD, // capture
67 [ 0x06 ] = KEY_PLAY, // unmarked
68 [ 0x2e ] = KEY_RED, // unmarked
69 [ 0x0e ] = KEY_GREEN, // unmarked
70
71 [ 0x21 ] = KEY_YELLOW, // unmarked
72 [ 0x11 ] = KEY_CHANNELDOWN,
73 [ 0x31 ] = KEY_CHANNELUP,
74 [ 0x01 ] = KEY_BLUE, // unmarked
75};
76
77EXPORT_SYMBOL_GPL(ir_codes_avermedia);
78
79/* Matt Jesson <dvb@jesson.eclipse.co.uk */ 35/* Matt Jesson <dvb@jesson.eclipse.co.uk */
80IR_KEYTAB_TYPE ir_codes_avermedia_dvbt[IR_KEYTAB_SIZE] = { 36IR_KEYTAB_TYPE ir_codes_avermedia_dvbt[IR_KEYTAB_SIZE] = {
81 [ 0x28 ] = KEY_0, //'0' / 'enter' 37 [ 0x28 ] = KEY_0, //'0' / 'enter'
@@ -162,7 +118,7 @@ EXPORT_SYMBOL_GPL(ir_codes_apac_viewcomp);
162 118
163/* ---------------------------------------------------------------------- */ 119/* ---------------------------------------------------------------------- */
164 120
165IR_KEYTAB_TYPE ir_codes_conceptronic[IR_KEYTAB_SIZE] = { 121IR_KEYTAB_TYPE ir_codes_pixelview[IR_KEYTAB_SIZE] = {
166 122
167 [ 0x1e ] = KEY_POWER, // power 123 [ 0x1e ] = KEY_POWER, // power
168 [ 0x07 ] = KEY_MEDIA, // source 124 [ 0x07 ] = KEY_MEDIA, // source
@@ -224,7 +180,7 @@ IR_KEYTAB_TYPE ir_codes_conceptronic[IR_KEYTAB_SIZE] = {
224 [ 0x18 ] = KEY_MUTE // mute/unmute 180 [ 0x18 ] = KEY_MUTE // mute/unmute
225}; 181};
226 182
227EXPORT_SYMBOL_GPL(ir_codes_conceptronic); 183EXPORT_SYMBOL_GPL(ir_codes_pixelview);
228 184
229IR_KEYTAB_TYPE ir_codes_nebula[IR_KEYTAB_SIZE] = { 185IR_KEYTAB_TYPE ir_codes_nebula[IR_KEYTAB_SIZE] = {
230 [ 0x00 ] = KEY_0, 186 [ 0x00 ] = KEY_0,
@@ -888,52 +844,8 @@ IR_KEYTAB_TYPE ir_codes_eztv[IR_KEYTAB_SIZE] = {
888 844
889EXPORT_SYMBOL_GPL(ir_codes_eztv); 845EXPORT_SYMBOL_GPL(ir_codes_eztv);
890 846
891IR_KEYTAB_TYPE ir_codes_avacssmart[IR_KEYTAB_SIZE] = {
892 [ 0x1e ] = KEY_POWER, // power
893 [ 0x1c ] = KEY_SEARCH, // scan
894 [ 0x07 ] = KEY_SELECT, // source
895
896 [ 0x16 ] = KEY_VOLUMEUP,
897 [ 0x14 ] = KEY_VOLUMEDOWN,
898 [ 0x1f ] = KEY_CHANNELUP,
899 [ 0x17 ] = KEY_CHANNELDOWN,
900 [ 0x18 ] = KEY_MUTE,
901
902 [ 0x02 ] = KEY_0,
903 [ 0x01 ] = KEY_1,
904 [ 0x0b ] = KEY_2,
905 [ 0x1b ] = KEY_3,
906 [ 0x05 ] = KEY_4,
907 [ 0x09 ] = KEY_5,
908 [ 0x15 ] = KEY_6,
909 [ 0x06 ] = KEY_7,
910 [ 0x0a ] = KEY_8,
911 [ 0x12 ] = KEY_9,
912 [ 0x10 ] = KEY_DOT,
913
914 [ 0x03 ] = KEY_TUNER, // tv/fm
915 [ 0x04 ] = KEY_REWIND, // fm tuning left or function left
916 [ 0x0c ] = KEY_FORWARD, // fm tuning right or function right
917
918 [ 0x00 ] = KEY_RECORD,
919 [ 0x08 ] = KEY_STOP,
920 [ 0x11 ] = KEY_PLAY,
921
922 [ 0x19 ] = KEY_ZOOM,
923 [ 0x0e ] = KEY_MENU, // function
924 [ 0x13 ] = KEY_AGAIN, // recall
925 [ 0x1d ] = KEY_RESTART, // reset
926 [ 0x1a ] = KEY_SHUFFLE, // snapshot/shuffle
927
928// FIXME
929 [ 0x0d ] = KEY_F21, // mts
930 [ 0x0f ] = KEY_F22, // min
931};
932
933EXPORT_SYMBOL_GPL(ir_codes_avacssmart);
934
935/* Alex Hermann <gaaf@gmx.net> */ 847/* Alex Hermann <gaaf@gmx.net> */
936IR_KEYTAB_TYPE ir_codes_md2819[IR_KEYTAB_SIZE] = { 848IR_KEYTAB_TYPE ir_codes_avermedia[IR_KEYTAB_SIZE] = {
937 [ 0x28 ] = KEY_1, 849 [ 0x28 ] = KEY_1,
938 [ 0x18 ] = KEY_2, 850 [ 0x18 ] = KEY_2,
939 [ 0x38 ] = KEY_3, 851 [ 0x38 ] = KEY_3,
@@ -945,41 +857,41 @@ IR_KEYTAB_TYPE ir_codes_md2819[IR_KEYTAB_SIZE] = {
945 [ 0x3c ] = KEY_9, 857 [ 0x3c ] = KEY_9,
946 [ 0x22 ] = KEY_0, 858 [ 0x22 ] = KEY_0,
947 859
948 [ 0x20 ] = KEY_TV, // TV/FM 860 [ 0x20 ] = KEY_TV, /* TV/FM */
949 [ 0x10 ] = KEY_CD, // CD 861 [ 0x10 ] = KEY_CD, /* CD */
950 [ 0x30 ] = KEY_TEXT, // TELETEXT 862 [ 0x30 ] = KEY_TEXT, /* TELETEXT */
951 [ 0x00 ] = KEY_POWER, // POWER 863 [ 0x00 ] = KEY_POWER, /* POWER */
952 864
953 [ 0x08 ] = KEY_VIDEO, // VIDEO 865 [ 0x08 ] = KEY_VIDEO, /* VIDEO */
954 [ 0x04 ] = KEY_AUDIO, // AUDIO 866 [ 0x04 ] = KEY_AUDIO, /* AUDIO */
955 [ 0x0c ] = KEY_ZOOM, // FULL SCREEN 867 [ 0x0c ] = KEY_ZOOM, /* FULL SCREEN */
956 868
957 [ 0x12 ] = KEY_SUBTITLE, // DISPLAY - ??? 869 [ 0x12 ] = KEY_SUBTITLE, /* DISPLAY */
958 [ 0x32 ] = KEY_REWIND, // LOOP - ??? 870 [ 0x32 ] = KEY_REWIND, /* LOOP */
959 [ 0x02 ] = KEY_PRINT, // PREVIEW - ??? 871 [ 0x02 ] = KEY_PRINT, /* PREVIEW */
960 872
961 [ 0x2a ] = KEY_SEARCH, // AUTOSCAN 873 [ 0x2a ] = KEY_SEARCH, /* AUTOSCAN */
962 [ 0x1a ] = KEY_SLEEP, // FREEZE - ??? 874 [ 0x1a ] = KEY_SLEEP, /* FREEZE */
963 [ 0x3a ] = KEY_SHUFFLE, // SNAPSHOT - ??? 875 [ 0x3a ] = KEY_SHUFFLE, /* SNAPSHOT */
964 [ 0x0a ] = KEY_MUTE, // MUTE 876 [ 0x0a ] = KEY_MUTE, /* MUTE */
965 877
966 [ 0x26 ] = KEY_RECORD, // RECORD 878 [ 0x26 ] = KEY_RECORD, /* RECORD */
967 [ 0x16 ] = KEY_PAUSE, // PAUSE 879 [ 0x16 ] = KEY_PAUSE, /* PAUSE */
968 [ 0x36 ] = KEY_STOP, // STOP 880 [ 0x36 ] = KEY_STOP, /* STOP */
969 [ 0x06 ] = KEY_PLAY, // PLAY 881 [ 0x06 ] = KEY_PLAY, /* PLAY */
970 882
971 [ 0x2e ] = KEY_RED, // <RED> 883 [ 0x2e ] = KEY_RED, /* RED */
972 [ 0x21 ] = KEY_GREEN, // <GREEN> 884 [ 0x21 ] = KEY_GREEN, /* GREEN */
973 [ 0x0e ] = KEY_YELLOW, // <YELLOW> 885 [ 0x0e ] = KEY_YELLOW, /* YELLOW */
974 [ 0x01 ] = KEY_BLUE, // <BLUE> 886 [ 0x01 ] = KEY_BLUE, /* BLUE */
975 887
976 [ 0x1e ] = KEY_VOLUMEDOWN, // VOLUME- 888 [ 0x1e ] = KEY_VOLUMEDOWN, /* VOLUME- */
977 [ 0x3e ] = KEY_VOLUMEUP, // VOLUME+ 889 [ 0x3e ] = KEY_VOLUMEUP, /* VOLUME+ */
978 [ 0x11 ] = KEY_CHANNELDOWN, // CHANNEL/PAGE- 890 [ 0x11 ] = KEY_CHANNELDOWN, /* CHANNEL/PAGE- */
979 [ 0x31 ] = KEY_CHANNELUP // CHANNEL/PAGE+ 891 [ 0x31 ] = KEY_CHANNELUP /* CHANNEL/PAGE+ */
980}; 892};
981 893
982EXPORT_SYMBOL_GPL(ir_codes_md2819); 894EXPORT_SYMBOL_GPL(ir_codes_avermedia);
983 895
984IR_KEYTAB_TYPE ir_codes_videomate_tv_pvr[IR_KEYTAB_SIZE] = { 896IR_KEYTAB_TYPE ir_codes_videomate_tv_pvr[IR_KEYTAB_SIZE] = {
985 [ 0x14 ] = KEY_MUTE, 897 [ 0x14 ] = KEY_MUTE,
@@ -1501,37 +1413,3 @@ IR_KEYTAB_TYPE ir_codes_hauppauge_new[IR_KEYTAB_SIZE] = {
1501 1413
1502EXPORT_SYMBOL_GPL(ir_codes_hauppauge_new); 1414EXPORT_SYMBOL_GPL(ir_codes_hauppauge_new);
1503 1415
1504IR_KEYTAB_TYPE ir_codes_pixelview[IR_KEYTAB_SIZE] = {
1505 [ 0x02 ] = KEY_0,
1506 [ 0x01 ] = KEY_1,
1507 [ 0x0b ] = KEY_2,
1508 [ 0x1b ] = KEY_3,
1509 [ 0x05 ] = KEY_4,
1510 [ 0x09 ] = KEY_5,
1511 [ 0x15 ] = KEY_6,
1512 [ 0x06 ] = KEY_7,
1513 [ 0x0a ] = KEY_8,
1514 [ 0x12 ] = KEY_9,
1515
1516 [ 0x03 ] = KEY_TUNER, /* TV/FM */
1517 [ 0x07 ] = KEY_SEARCH, /* scan */
1518 [ 0x1c ] = KEY_ZOOM, /* full screen */
1519 [ 0x1e ] = KEY_POWER,
1520 [ 0x17 ] = KEY_VOLUMEDOWN,
1521 [ 0x1f ] = KEY_VOLUMEUP,
1522 [ 0x14 ] = KEY_CHANNELDOWN,
1523 [ 0x16 ] = KEY_CHANNELUP,
1524 [ 0x18 ] = KEY_MUTE,
1525
1526 [ 0x00 ] = KEY_LIST, /* source */
1527 [ 0x13 ] = KEY_INFO, /* loop */
1528 [ 0x10 ] = KEY_LAST, /* +100 */
1529 [ 0x0d ] = KEY_CLEAR, /* reset */
1530 [ 0x0c ] = BTN_RIGHT, /* fun++ */
1531 [ 0x04 ] = BTN_LEFT, /* fun-- */
1532 [ 0x0e ] = KEY_GOTO, /* function */
1533 [ 0x0f ] = KEY_STOP, /* freeze */
1534};
1535
1536EXPORT_SYMBOL_GPL(ir_codes_pixelview);
1537
diff --git a/drivers/media/video/bttv-input.c b/drivers/media/video/bttv-input.c
index 42760ae867d6..c637677acefd 100644
--- a/drivers/media/video/bttv-input.c
+++ b/drivers/media/video/bttv-input.c
@@ -328,7 +328,7 @@ int bttv_input_init(struct bttv *btv)
328 ir->polling = 50; // ms 328 ir->polling = 50; // ms
329 break; 329 break;
330 case BTTV_BOARD_CONCEPTRONIC_CTVFMI2: 330 case BTTV_BOARD_CONCEPTRONIC_CTVFMI2:
331 ir_codes = ir_codes_conceptronic; 331 ir_codes = ir_codes_pixelview;
332 ir->mask_keycode = 0x001F00; 332 ir->mask_keycode = 0x001F00;
333 ir->mask_keyup = 0x006000; 333 ir->mask_keyup = 0x006000;
334 ir->polling = 50; // ms 334 ir->polling = 50; // ms
diff --git a/drivers/media/video/cx88/cx88-input.c b/drivers/media/video/cx88/cx88-input.c
index a4fa92c1b0c7..800e2b31ac7b 100644
--- a/drivers/media/video/cx88/cx88-input.c
+++ b/drivers/media/video/cx88/cx88-input.c
@@ -192,6 +192,13 @@ int cx88_ir_init(struct cx88_core *core, struct pci_dev *pci)
192 ir->mask_keyup = 0x80; 192 ir->mask_keyup = 0x80;
193 ir->polling = 1; /* ms */ 193 ir->polling = 1; /* ms */
194 break; 194 break;
195 case CX88_BOARD_KWORLD_LTV883:
196 ir_codes = ir_codes_pixelview;
197 ir->gpio_addr = MO_GP1_IO;
198 ir->mask_keycode = 0x1f;
199 ir->mask_keyup = 0x60;
200 ir->polling = 1; /* ms */
201 break;
195 case CX88_BOARD_ADSTECH_DVB_T_PCI: 202 case CX88_BOARD_ADSTECH_DVB_T_PCI:
196 ir_codes = ir_codes_adstech_dvb_t_pci; 203 ir_codes = ir_codes_adstech_dvb_t_pci;
197 ir->gpio_addr = MO_GP1_IO; 204 ir->gpio_addr = MO_GP1_IO;
diff --git a/drivers/media/video/saa7134/saa7134-input.c b/drivers/media/video/saa7134/saa7134-input.c
index 342568cf728f..ecfb6e2b3bd3 100644
--- a/drivers/media/video/saa7134/saa7134-input.c
+++ b/drivers/media/video/saa7134/saa7134-input.c
@@ -169,7 +169,7 @@ int saa7134_input_init1(struct saa7134_dev *dev)
169 break; 169 break;
170 case SAA7134_BOARD_KWORLD_XPERT: 170 case SAA7134_BOARD_KWORLD_XPERT:
171 case SAA7134_BOARD_AVACSSMARTTV: 171 case SAA7134_BOARD_AVACSSMARTTV:
172 ir_codes = ir_codes_avacssmart; 172 ir_codes = ir_codes_pixelview;
173 mask_keycode = 0x00001F; 173 mask_keycode = 0x00001F;
174 mask_keyup = 0x000020; 174 mask_keyup = 0x000020;
175 polling = 50; // ms 175 polling = 50; // ms
@@ -181,7 +181,7 @@ int saa7134_input_init1(struct saa7134_dev *dev)
181 case SAA7134_BOARD_AVERMEDIA_STUDIO_305: 181 case SAA7134_BOARD_AVERMEDIA_STUDIO_305:
182 case SAA7134_BOARD_AVERMEDIA_STUDIO_307: 182 case SAA7134_BOARD_AVERMEDIA_STUDIO_307:
183 case SAA7134_BOARD_AVERMEDIA_GO_007_FM: 183 case SAA7134_BOARD_AVERMEDIA_GO_007_FM:
184 ir_codes = ir_codes_md2819; 184 ir_codes = ir_codes_avermedia;
185 mask_keycode = 0x0007C8; 185 mask_keycode = 0x0007C8;
186 mask_keydown = 0x000010; 186 mask_keydown = 0x000010;
187 polling = 50; // ms 187 polling = 50; // ms
@@ -190,7 +190,7 @@ int saa7134_input_init1(struct saa7134_dev *dev)
190 saa_setb(SAA7134_GPIO_GPSTATUS0, 0x4); 190 saa_setb(SAA7134_GPIO_GPSTATUS0, 0x4);
191 break; 191 break;
192 case SAA7134_BOARD_KWORLD_TERMINATOR: 192 case SAA7134_BOARD_KWORLD_TERMINATOR:
193 ir_codes = ir_codes_avacssmart; 193 ir_codes = ir_codes_pixelview;
194 mask_keycode = 0x00001f; 194 mask_keycode = 0x00001f;
195 mask_keyup = 0x000060; 195 mask_keyup = 0x000060;
196 polling = 50; // ms 196 polling = 50; // ms
diff --git a/include/media/ir-common.h b/include/media/ir-common.h
index 50fe522bad33..302d5b3946e7 100644
--- a/include/media/ir-common.h
+++ b/include/media/ir-common.h
@@ -63,7 +63,7 @@ extern IR_KEYTAB_TYPE ir_codes_empty[IR_KEYTAB_SIZE];
63extern IR_KEYTAB_TYPE ir_codes_avermedia[IR_KEYTAB_SIZE]; 63extern IR_KEYTAB_TYPE ir_codes_avermedia[IR_KEYTAB_SIZE];
64extern IR_KEYTAB_TYPE ir_codes_avermedia_dvbt[IR_KEYTAB_SIZE]; 64extern IR_KEYTAB_TYPE ir_codes_avermedia_dvbt[IR_KEYTAB_SIZE];
65extern IR_KEYTAB_TYPE ir_codes_apac_viewcomp[IR_KEYTAB_SIZE]; 65extern IR_KEYTAB_TYPE ir_codes_apac_viewcomp[IR_KEYTAB_SIZE];
66extern IR_KEYTAB_TYPE ir_codes_conceptronic[IR_KEYTAB_SIZE]; 66extern IR_KEYTAB_TYPE ir_codes_pixelview[IR_KEYTAB_SIZE];
67extern IR_KEYTAB_TYPE ir_codes_nebula[IR_KEYTAB_SIZE]; 67extern IR_KEYTAB_TYPE ir_codes_nebula[IR_KEYTAB_SIZE];
68extern IR_KEYTAB_TYPE ir_codes_dntv_live_dvb_t[IR_KEYTAB_SIZE]; 68extern IR_KEYTAB_TYPE ir_codes_dntv_live_dvb_t[IR_KEYTAB_SIZE];
69extern IR_KEYTAB_TYPE ir_codes_iodata_bctv7e[IR_KEYTAB_SIZE]; 69extern IR_KEYTAB_TYPE ir_codes_iodata_bctv7e[IR_KEYTAB_SIZE];
@@ -78,8 +78,7 @@ extern IR_KEYTAB_TYPE ir_codes_flyvideo[IR_KEYTAB_SIZE];
78extern IR_KEYTAB_TYPE ir_codes_flydvb[IR_KEYTAB_SIZE]; 78extern IR_KEYTAB_TYPE ir_codes_flydvb[IR_KEYTAB_SIZE];
79extern IR_KEYTAB_TYPE ir_codes_cinergy[IR_KEYTAB_SIZE]; 79extern IR_KEYTAB_TYPE ir_codes_cinergy[IR_KEYTAB_SIZE];
80extern IR_KEYTAB_TYPE ir_codes_eztv[IR_KEYTAB_SIZE]; 80extern IR_KEYTAB_TYPE ir_codes_eztv[IR_KEYTAB_SIZE];
81extern IR_KEYTAB_TYPE ir_codes_avacssmart[IR_KEYTAB_SIZE]; 81extern IR_KEYTAB_TYPE ir_codes_avermedia[IR_KEYTAB_SIZE];
82extern IR_KEYTAB_TYPE ir_codes_md2819[IR_KEYTAB_SIZE];
83extern IR_KEYTAB_TYPE ir_codes_videomate_tv_pvr[IR_KEYTAB_SIZE]; 82extern IR_KEYTAB_TYPE ir_codes_videomate_tv_pvr[IR_KEYTAB_SIZE];
84extern IR_KEYTAB_TYPE ir_codes_manli[IR_KEYTAB_SIZE]; 83extern IR_KEYTAB_TYPE ir_codes_manli[IR_KEYTAB_SIZE];
85extern IR_KEYTAB_TYPE ir_codes_gotview7135[IR_KEYTAB_SIZE]; 84extern IR_KEYTAB_TYPE ir_codes_gotview7135[IR_KEYTAB_SIZE];
@@ -90,7 +89,6 @@ extern IR_KEYTAB_TYPE ir_codes_rc5_tv[IR_KEYTAB_SIZE];
90extern IR_KEYTAB_TYPE ir_codes_winfast[IR_KEYTAB_SIZE]; 89extern IR_KEYTAB_TYPE ir_codes_winfast[IR_KEYTAB_SIZE];
91extern IR_KEYTAB_TYPE ir_codes_pinnacle[IR_KEYTAB_SIZE]; 90extern IR_KEYTAB_TYPE ir_codes_pinnacle[IR_KEYTAB_SIZE];
92extern IR_KEYTAB_TYPE ir_codes_hauppauge_new[IR_KEYTAB_SIZE]; 91extern IR_KEYTAB_TYPE ir_codes_hauppauge_new[IR_KEYTAB_SIZE];
93extern IR_KEYTAB_TYPE ir_codes_pixelview[IR_KEYTAB_SIZE];
94 92
95#endif 93#endif
96 94