diff options
author | Mark Arigo <markarigo@gmail.com> | 2009-02-18 02:19:22 +0000 |
---|---|---|
committer | Mark Arigo <markarigo@gmail.com> | 2009-02-18 02:19:22 +0000 |
commit | f34cd80f638a6ca3b336f6ebd14cd958974b2760 (patch) | |
tree | 91195848e098a6f0f6372d39424306e32d3df9d2 /firmware/drivers/synaptics-mep.c | |
parent | 42ef5b0c88f92418c79e7414063c808b7c36a9be (diff) | |
download | rockbox-f34cd80f638a6ca3b336f6ebd14cd958974b2760.tar.gz rockbox-f34cd80f638a6ca3b336f6ebd14cd958974b2760.zip |
Backlight brightness and button lights for the Philips HDD1630
git-svn-id: svn://svn.rockbox.org/rockbox/trunk@20035 a1c6a512-1295-4272-9138-f99709370657
Diffstat (limited to 'firmware/drivers/synaptics-mep.c')
-rw-r--r-- | firmware/drivers/synaptics-mep.c | 66 |
1 files changed, 51 insertions, 15 deletions
diff --git a/firmware/drivers/synaptics-mep.c b/firmware/drivers/synaptics-mep.c index 858edf54fe..a14e875cc1 100644 --- a/firmware/drivers/synaptics-mep.c +++ b/firmware/drivers/synaptics-mep.c | |||
@@ -33,6 +33,9 @@ | |||
33 | Protocol: 3-Wire Interface Specification" documentation */ | 33 | Protocol: 3-Wire Interface Specification" documentation */ |
34 | 34 | ||
35 | #if defined(MROBE_100) | 35 | #if defined(MROBE_100) |
36 | #define INT_ENABLE GPIOD_INT_LEV &= ~0x2; GPIOD_INT_EN |= 0x2 | ||
37 | #define INT_DISABLE GPIOD_INT_EN &= ~0x2; GPIOD_INT_CLR |= 0x2 | ||
38 | |||
36 | #define ACK (GPIOD_INPUT_VAL & 0x1) | 39 | #define ACK (GPIOD_INPUT_VAL & 0x1) |
37 | #define ACK_HI GPIOD_OUTPUT_VAL |= 0x1 | 40 | #define ACK_HI GPIOD_OUTPUT_VAL |= 0x1 |
38 | #define ACK_LO GPIOD_OUTPUT_VAL &= ~0x1 | 41 | #define ACK_LO GPIOD_OUTPUT_VAL &= ~0x1 |
@@ -47,6 +50,9 @@ | |||
47 | #define DATA_CL GPIOD_OUTPUT_EN &= ~0x4 | 50 | #define DATA_CL GPIOD_OUTPUT_EN &= ~0x4 |
48 | 51 | ||
49 | #elif defined(PHILIPS_HDD1630) | 52 | #elif defined(PHILIPS_HDD1630) |
53 | #define INT_ENABLE GPIOA_INT_LEV &= ~0x20; GPIOA_INT_EN |= 0x20 | ||
54 | #define INT_DISABLE GPIOA_INT_EN &= ~0x20; GPIOA_INT_CLR |= 0x20 | ||
55 | |||
50 | #define ACK (GPIOD_INPUT_VAL & 0x80) | 56 | #define ACK (GPIOD_INPUT_VAL & 0x80) |
51 | #define ACK_HI GPIOD_OUTPUT_VAL |= 0x80 | 57 | #define ACK_HI GPIOD_OUTPUT_VAL |= 0x80 |
52 | #define ACK_LO GPIOD_OUTPUT_VAL &= ~0x80 | 58 | #define ACK_LO GPIOD_OUTPUT_VAL &= ~0x80 |
@@ -73,6 +79,8 @@ | |||
73 | #define MEP_READ 0x1 | 79 | #define MEP_READ 0x1 |
74 | #define MEP_WRITE 0x3 | 80 | #define MEP_WRITE 0x3 |
75 | 81 | ||
82 | static unsigned short syn_status = 0; | ||
83 | |||
76 | static int syn_wait_clk_change(unsigned int val) | 84 | static int syn_wait_clk_change(unsigned int val) |
77 | { | 85 | { |
78 | int i; | 86 | int i; |
@@ -140,12 +148,12 @@ static void syn_flush(void) | |||
140 | syn_wait_guest_flush(); | 148 | syn_wait_guest_flush(); |
141 | } | 149 | } |
142 | 150 | ||
143 | static int syn_send_data(int *data, int len) | 151 | int syn_send(int *data, int len) |
144 | { | 152 | { |
145 | int i, bit; | 153 | int i, bit; |
146 | int parity = 0; | 154 | int parity = 0; |
147 | 155 | ||
148 | logf("syn_send_data..."); | 156 | logf("syn_send..."); |
149 | 157 | ||
150 | /* 1. Lower DATA line to issue a request-to-send to guest */ | 158 | /* 1. Lower DATA line to issue a request-to-send to guest */ |
151 | DATA_LO; | 159 | DATA_LO; |
@@ -380,7 +388,7 @@ static int syn_read_data(int *data, int data_len) | |||
380 | return len; | 388 | return len; |
381 | } | 389 | } |
382 | 390 | ||
383 | int syn_read_device(int *data, int len) | 391 | int syn_read(int *data, int len) |
384 | { | 392 | { |
385 | int i; | 393 | int i; |
386 | int ret = READ_ERROR; | 394 | int ret = READ_ERROR; |
@@ -406,7 +414,7 @@ int syn_read_device(int *data, int len) | |||
406 | return ret; | 414 | return ret; |
407 | } | 415 | } |
408 | 416 | ||
409 | static int syn_reset(void) | 417 | int syn_reset(void) |
410 | { | 418 | { |
411 | int val, id; | 419 | int val, id; |
412 | int data[2]; | 420 | int data[2]; |
@@ -415,9 +423,9 @@ static int syn_reset(void) | |||
415 | 423 | ||
416 | /* reset module 0 */ | 424 | /* reset module 0 */ |
417 | val = (0 << 4) | (1 << 3) | 0; | 425 | val = (0 << 4) | (1 << 3) | 0; |
418 | syn_send_data(&val, 1); | 426 | syn_send(&val, 1); |
419 | 427 | ||
420 | val = syn_read_device(data, 2); | 428 | val = syn_read(data, 2); |
421 | if (val == 1) | 429 | if (val == 1) |
422 | { | 430 | { |
423 | val = data[0] & 0xff; /* packet header */ | 431 | val = data[0] & 0xff; /* packet header */ |
@@ -436,7 +444,35 @@ static int syn_reset(void) | |||
436 | int syn_init(void) | 444 | int syn_init(void) |
437 | { | 445 | { |
438 | syn_flush(); | 446 | syn_flush(); |
439 | return syn_reset(); | 447 | syn_status = syn_reset(); |
448 | |||
449 | if (syn_status) | ||
450 | { | ||
451 | INT_DISABLE; | ||
452 | INT_ENABLE; | ||
453 | |||
454 | CPU_INT_EN |= HI_MASK; | ||
455 | CPU_HI_INT_EN |= GPIO0_MASK; | ||
456 | } | ||
457 | |||
458 | return syn_status; | ||
459 | } | ||
460 | |||
461 | int syn_get_status(void) | ||
462 | { | ||
463 | return syn_status; | ||
464 | } | ||
465 | |||
466 | void syn_int_enable(bool enable) | ||
467 | { | ||
468 | if (enable) | ||
469 | { | ||
470 | INT_ENABLE; | ||
471 | } | ||
472 | else | ||
473 | { | ||
474 | INT_DISABLE; | ||
475 | } | ||
440 | } | 476 | } |
441 | 477 | ||
442 | #ifdef ROCKBOX_HAS_LOGF | 478 | #ifdef ROCKBOX_HAS_LOGF |
@@ -451,8 +487,8 @@ void syn_info(void) | |||
451 | logf("module base info:"); | 487 | logf("module base info:"); |
452 | data[0] = MEP_READ; | 488 | data[0] = MEP_READ; |
453 | data[1] = 0x80; | 489 | data[1] = 0x80; |
454 | syn_send_data(data, 2); | 490 | syn_send(data, 2); |
455 | val = syn_read_device(data, 8); | 491 | val = syn_read(data, 8); |
456 | if (val > 0) | 492 | if (val > 0) |
457 | { | 493 | { |
458 | for (i = 0; i < 8; i++) | 494 | for (i = 0; i < 8; i++) |
@@ -463,8 +499,8 @@ void syn_info(void) | |||
463 | logf("module product info:"); | 499 | logf("module product info:"); |
464 | data[0] = MEP_READ; | 500 | data[0] = MEP_READ; |
465 | data[1] = 0x81; | 501 | data[1] = 0x81; |
466 | syn_send_data(data, 2); | 502 | syn_send(data, 2); |
467 | val = syn_read_device(data, 8); | 503 | val = syn_read(data, 8); |
468 | if (val > 0) | 504 | if (val > 0) |
469 | { | 505 | { |
470 | for (i = 0; i < 8; i++) | 506 | for (i = 0; i < 8; i++) |
@@ -475,8 +511,8 @@ void syn_info(void) | |||
475 | logf("module serialization:"); | 511 | logf("module serialization:"); |
476 | data[0] = MEP_READ; | 512 | data[0] = MEP_READ; |
477 | data[1] = 0x82; | 513 | data[1] = 0x82; |
478 | syn_send_data(data, 2); | 514 | syn_send(data, 2); |
479 | val = syn_read_device(data, 8); | 515 | val = syn_read(data, 8); |
480 | if (val > 0) | 516 | if (val > 0) |
481 | { | 517 | { |
482 | for (i = 0; i < 8; i++) | 518 | for (i = 0; i < 8; i++) |
@@ -487,8 +523,8 @@ void syn_info(void) | |||
487 | logf("1-d sensor info:"); | 523 | logf("1-d sensor info:"); |
488 | data[0] = MEP_READ; | 524 | data[0] = MEP_READ; |
489 | data[1] = 0x80 + 0x20; | 525 | data[1] = 0x80 + 0x20; |
490 | syn_send_data(data, 2); | 526 | syn_send(data, 2); |
491 | val = syn_read_device(data, 8); | 527 | val = syn_read(data, 8); |
492 | if (val > 0) | 528 | if (val > 0) |
493 | { | 529 | { |
494 | for (i = 0; i < 8; i++) | 530 | for (i = 0; i < 8; i++) |