|
55 | 55 | #define MIYOO_FB0_PUT_OSD _IOWR(0x100, 0, unsigned long) |
56 | 56 | #define MIYOO_SND_SET_VOLUME _IOWR(0x100, 0, unsigned long) |
57 | 57 | #define MIYOO_SND_GET_VOLUME _IOWR(0x101, 0, unsigned long) |
| 58 | +#define MIYOO_SND_JACK_STATUS _IOWR(0x102, 0, unsigned long) |
| 59 | +#define MIYOO_TV_JACK_STATUS _IOWR(0x103, 0, unsigned long) |
58 | 60 |
|
59 | 61 | struct mypcm { |
60 | 62 | uint32_t dma_period; |
@@ -84,7 +86,9 @@ static struct class *myclass = NULL; |
84 | 86 |
|
85 | 87 | static unsigned long MIYOO_VOLUME = 5; |
86 | 88 | static uint32_t miyoo_snd=1; |
| 89 | +static bool miyoo_tvjack=false; |
87 | 90 | module_param(miyoo_snd,uint,0660); |
| 91 | +module_param(miyoo_tvjack,bool,0660); |
88 | 92 |
|
89 | 93 | static void suniv_ioremap(void) |
90 | 94 | { |
@@ -469,8 +473,30 @@ EXPORT_SYMBOL_GPL(MIYOO_DECREASE_VOLUME); |
469 | 473 | static long myioctl(struct file *filp, unsigned int cmd, unsigned long arg) |
470 | 474 | { |
471 | 475 | uint32_t ret; |
| 476 | + bool jack = false; |
| 477 | + bool tvjack = false; |
472 | 478 |
|
473 | 479 | switch(cmd){ |
| 480 | + case MIYOO_SND_JACK_STATUS: |
| 481 | + ret = readl(iomm.gpio + PA_DATA); |
| 482 | + if(ret & 4) |
| 483 | + jack = false; |
| 484 | + else |
| 485 | + jack = true; |
| 486 | + ret = copy_to_user((void*)arg, &jack, sizeof(bool)); |
| 487 | + break; |
| 488 | + case MIYOO_TV_JACK_STATUS: |
| 489 | + ret = readl(iomm.gpio + PA_DATA); |
| 490 | + if(miyoo_tvjack){ |
| 491 | + // no info about separate tvjack PIN data |
| 492 | + } else { |
| 493 | + if(ret & 4) |
| 494 | + tvjack = false; |
| 495 | + else |
| 496 | + tvjack = true; |
| 497 | + } |
| 498 | + ret = copy_to_user((void*)arg, &tvjack, sizeof(bool)); |
| 499 | + break; |
474 | 500 | case MIYOO_SND_SET_VOLUME: |
475 | 501 | MIYOO_SET_VOLUME(arg); |
476 | 502 | break; |
|
0 commit comments