summaryrefslogtreecommitdiff
path: root/firmware/target/arm/ipod/button-clickwheel.c
diff options
context:
space:
mode:
Diffstat (limited to 'firmware/target/arm/ipod/button-clickwheel.c')
-rw-r--r--firmware/target/arm/ipod/button-clickwheel.c33
1 files changed, 19 insertions, 14 deletions
diff --git a/firmware/target/arm/ipod/button-clickwheel.c b/firmware/target/arm/ipod/button-clickwheel.c
index 3af50b5112..5f138aaf1b 100644
--- a/firmware/target/arm/ipod/button-clickwheel.c
+++ b/firmware/target/arm/ipod/button-clickwheel.c
@@ -271,6 +271,12 @@ static inline int ipod_4g_button_read(void)
271 semaphore_release(&button_init_wakeup); 271 semaphore_release(&button_init_wakeup);
272 } 272 }
273#endif 273#endif
274#if CONFIG_CPU==S5L8702
275 else if (status == 0xAAAAAAAA)
276 {
277 GPIOCMD = 0xe040f; /* DOUT = Output High */
278 }
279#endif
274 280
275#ifdef CPU_PP 281#ifdef CPU_PP
276 } 282 }
@@ -362,9 +368,11 @@ static void s5l_clickwheel_init(void)
362 WHEEL04 |= 1; 368 WHEEL04 |= 1;
363 PDAT10 &= ~2; 369 PDAT10 &= ~2;
364#elif CONFIG_CPU==S5L8702 370#elif CONFIG_CPU==S5L8702
365 /* enable and init internal (s5l8702) wheel controller */ 371 PWRCON(1) &= ~(1 << 1); /* unmask clockgate */
366 PWRCON(1) &= ~(1 << 1); 372 WHEEL00 = 0; /* stop s5l8702 controller */
367 PCON(14) = (PCON(14) & ~0xffff0000) | 0x22220000; 373 PUNB(14) &= ~(1 << 2); /* disable pull-up for GPIO E2 */
374 udelay(100);
375 PCON(14) = (PCON(14) & ~0x00ffff00) | 0x00222200;
368 WHEELINT = 7; 376 WHEELINT = 7;
369 WHEEL10 = 1; 377 WHEEL10 = 1;
370 WHEEL00 = 0x380000; 378 WHEEL00 = 0x380000;
@@ -379,12 +387,15 @@ void button_init_device(void)
379 semaphore_init(&button_init_wakeup, 1, 0); 387 semaphore_init(&button_init_wakeup, 1, 0);
380#if CONFIG_CPU==S5L8701 388#if CONFIG_CPU==S5L8701
381 INTMSK |= (1<<26); 389 INTMSK |= (1<<26);
382#elif CONFIG_CPU==S5L8702
383 /* configure GPIO E2 as pull-up input */
384 PUNB(14) |= (1 << 2);
385#endif 390#endif
386 s5l_clickwheel_init(); 391 s5l_clickwheel_init();
387 semaphore_wait(&button_init_wakeup, HZ / 10); 392 semaphore_wait(&button_init_wakeup, HZ / 10);
393#if CONFIG_CPU==S5L8702
394 /* configure GPIO E2 as pull-up input */
395 PUNB(14) |= (1 << 2);
396 udelay(100);
397 GPIOCMD = 0xe0200;
398#endif
388} 399}
389 400
390bool button_hold(void) 401bool button_hold(void)
@@ -439,13 +450,7 @@ int button_read_device(void)
439 WHEEL10 = 0; 450 WHEEL10 = 0;
440 PWRCONEXT |= 1; 451 PWRCONEXT |= 1;
441#elif CONFIG_CPU==S5L8702 452#elif CONFIG_CPU==S5L8702
442 /* disable external (CY8C21x34) wheel controller */ 453 GPIOCMD = 0xe040e; /* DOUT = Output Low */
443 GPIOCMD = 0xe040e;
444
445 /* disable internal (s5l8702) wheel controller */
446 WHEEL00 = 0;
447 WHEEL10 = 0;
448 PWRCON(1) |= (1 << 1);
449#endif 454#endif
450 } 455 }
451 else 456 else
@@ -458,7 +463,7 @@ int button_read_device(void)
458 pmu_ldo_power_on(1); /* enable clickwheel power supply */ 463 pmu_ldo_power_on(1); /* enable clickwheel power supply */
459 s5l_clickwheel_init(); 464 s5l_clickwheel_init();
460#elif CONFIG_CPU==S5L8702 465#elif CONFIG_CPU==S5L8702
461 s5l_clickwheel_init(); 466 GPIOCMD = 0xe040f; /* DOUT = Output High */
462#endif 467#endif
463 } 468 }
464 } 469 }