Lines Matching refs:sc
61 #define CSR_READ1(r) bus_space_read_1(sc->sc_iot, sc->sc_ioh, (r))
62 #define CSR_WRITE1(r,v) bus_space_write_1(sc->sc_iot, sc->sc_ioh, (r), (v))
63 #define CSR_READ2(r) bus_space_read_2(sc->sc_iot, sc->sc_ioh, (r))
64 #define CSR_WRITE2(r,v) bus_space_write_2(sc->sc_iot, sc->sc_ioh, (r), (v))
65 #define CSR_READ4(r) bus_space_read_4(sc->sc_iot, sc->sc_ioh, (r))
66 #define CSR_WRITE4(r,v) bus_space_write_4(sc->sc_iot, sc->sc_ioh, (r), (v))
262 struct wzero3kbd_softc *sc = device_private(self); in wzero3kbd_attach() local
267 sc->sc_dev = self; in wzero3kbd_attach()
278 sc->sc_key_pin = model->key_pin; in wzero3kbd_attach()
279 sc->sc_power_pin = model->power_pin; in wzero3kbd_attach()
280 sc->sc_reset_pin = model->reset_pin; in wzero3kbd_attach()
281 sc->sc_ncolumn = model->ncolumn; in wzero3kbd_attach()
282 sc->sc_nrow = model->nrow; in wzero3kbd_attach()
284 sc->sc_iot = pxa->pxa_iot; in wzero3kbd_attach()
285 if (bus_space_map(sc->sc_iot, PXA2X0_CS2_START, REGMAPSIZE, 0, in wzero3kbd_attach()
286 &sc->sc_ioh)) { in wzero3kbd_attach()
291 sc->sc_okeystat = kmem_zalloc(sc->sc_nrow * sc->sc_ncolumn, KM_SLEEP); in wzero3kbd_attach()
292 sc->sc_keystat = kmem_zalloc(sc->sc_nrow * sc->sc_ncolumn, KM_SLEEP); in wzero3kbd_attach()
294 sc->sc_if.hii_ctx = sc; in wzero3kbd_attach()
295 sc->sc_if.hii_establish = wzero3kbd_input_establish; in wzero3kbd_attach()
296 sc->sc_if.hii_poll = wzero3kbd_poll; in wzero3kbd_attach()
300 hpckbd_cnattach(&sc->sc_if); in wzero3kbd_attach()
303 if (sc->sc_key_pin >= 0) { in wzero3kbd_attach()
304 pxa2x0_gpio_set_function(sc->sc_key_pin, GPIO_IN); in wzero3kbd_attach()
305 sc->sc_key_ih = pxa2x0_gpio_intr_establish(sc->sc_key_pin, in wzero3kbd_attach()
306 IST_EDGE_BOTH, IPL_TTY, wzero3kbd_intr, sc); in wzero3kbd_attach()
307 if (sc->sc_key_ih == NULL) { in wzero3kbd_attach()
308 aprint_error_dev(sc->sc_dev, in wzero3kbd_attach()
312 sc->sc_interval = KEY_INTERVAL / (1000 / hz); in wzero3kbd_attach()
313 if (sc->sc_interval < 1) in wzero3kbd_attach()
314 sc->sc_interval = 1; in wzero3kbd_attach()
315 callout_init(&sc->sc_keyscan_ch, 0); in wzero3kbd_attach()
316 callout_reset(&sc->sc_keyscan_ch, sc->sc_interval, in wzero3kbd_attach()
317 wzero3kbd_tick, sc); in wzero3kbd_attach()
321 if (sc->sc_power_pin >= 0) { in wzero3kbd_attach()
322 pxa2x0_gpio_set_function(sc->sc_power_pin, GPIO_IN); in wzero3kbd_attach()
323 sc->sc_power_ih = pxa2x0_gpio_intr_establish( in wzero3kbd_attach()
324 sc->sc_power_pin, IST_EDGE_BOTH, IPL_TTY, in wzero3kbd_attach()
325 wzero3kbd_power_intr, sc); in wzero3kbd_attach()
326 if (sc->sc_power_ih == NULL) { in wzero3kbd_attach()
327 aprint_error_dev(sc->sc_dev, in wzero3kbd_attach()
333 if (sc->sc_reset_pin >= 0) { in wzero3kbd_attach()
334 pxa2x0_gpio_set_function(sc->sc_reset_pin, GPIO_IN); in wzero3kbd_attach()
335 sc->sc_reset_ih = pxa2x0_gpio_intr_establish( in wzero3kbd_attach()
336 sc->sc_reset_pin, IST_EDGE_BOTH, IPL_TTY, in wzero3kbd_attach()
337 wzero3kbd_reset_intr, sc); in wzero3kbd_attach()
338 if (sc->sc_reset_ih == NULL) { in wzero3kbd_attach()
339 aprint_error_dev(sc->sc_dev, in wzero3kbd_attach()
343 sc->sc_smpsw.smpsw_name = device_xname(self); in wzero3kbd_attach()
344 sc->sc_smpsw.smpsw_type = PSWITCH_TYPE_RESET; in wzero3kbd_attach()
345 if (sysmon_pswitch_register(&sc->sc_smpsw) != 0) { in wzero3kbd_attach()
346 aprint_error_dev(sc->sc_dev, in wzero3kbd_attach()
352 haa.haa_ic = &sc->sc_if; in wzero3kbd_attach()
356 sc->sc_test_ih = NULL; in wzero3kbd_attach()
357 sc->sc_test_pin = -1; in wzero3kbd_attach()
358 sc->sc_nouse_pin = -1; in wzero3kbd_attach()
359 sc->sc_nouse_pin2 = -1; in wzero3kbd_attach()
360 sc->sc_nouse_pin3 = -1; in wzero3kbd_attach()
361 sc->sc_bit = 0x01; in wzero3kbd_attach()
364 sc->sc_nouse_pin = GPIO_WS003SH_SD_DETECT; /* SD_DETECT */ in wzero3kbd_attach()
365 sc->sc_nouse_pin2 = 86; /* Vsync? */ in wzero3kbd_attach()
366 sc->sc_nouse_pin3 = 89; /* RESET? */ in wzero3kbd_attach()
369 sc->sc_nouse_pin = GPIO_WS007SH_SD_DETECT; /* SD_DETECT */ in wzero3kbd_attach()
370 sc->sc_nouse_pin2 = 77; /* Vsync? */ in wzero3kbd_attach()
373 sc->sc_nouse_pin = GPIO_WS011SH_SD_DETECT; /* SD_DETECT */ in wzero3kbd_attach()
374 sc->sc_nouse_pin2 = 77; /* Vsync? */ in wzero3kbd_attach()
377 sc->sc_nouse_pin = GPIO_WS020SH_SD_DETECT; /* SD_DETECT */ in wzero3kbd_attach()
378 sc->sc_nouse_pin2 = 77; /* Vsync? */ in wzero3kbd_attach()
382 for (sc->sc_test_pin = 2; sc->sc_test_pin < PXA270_GPIO_NPINS; sc->sc_test_pin++) { in wzero3kbd_attach()
383 if (sc->sc_test_pin != sc->sc_nouse_pin in wzero3kbd_attach()
384 && sc->sc_test_pin != sc->sc_nouse_pin2 in wzero3kbd_attach()
385 && sc->sc_test_pin != sc->sc_nouse_pin3 in wzero3kbd_attach()
386 && sc->sc_test_pin != sc->sc_key_pin in wzero3kbd_attach()
387 && sc->sc_test_pin != sc->sc_power_pin in wzero3kbd_attach()
388 && sc->sc_test_pin != sc->sc_reset_pin in wzero3kbd_attach()
389 && GPIO_IS_GPIO_IN(pxa2x0_gpio_get_function(sc->sc_test_pin))) in wzero3kbd_attach()
392 if (sc->sc_test_pin < PXA270_GPIO_NPINS) { in wzero3kbd_attach()
393 printf("GPIO_IN: GPIO pin #%d\n", sc->sc_test_pin); in wzero3kbd_attach()
394 sc->sc_test_ih = pxa2x0_gpio_intr_establish(sc->sc_test_pin, in wzero3kbd_attach()
395 IST_EDGE_BOTH, IPL_TTY, wzero3kbd_intr2, sc); in wzero3kbd_attach()
397 sc->sc_test_pin = -1; in wzero3kbd_attach()
406 if (i == sc->sc_nouse_pin in wzero3kbd_attach()
407 || i == sc->sc_nouse_pin2 in wzero3kbd_attach()
408 || i == sc->sc_nouse_pin3 in wzero3kbd_attach()
409 || i == sc->sc_key_pin in wzero3kbd_attach()
410 || i == sc->sc_power_pin in wzero3kbd_attach()
411 || i == sc->sc_reset_pin) in wzero3kbd_attach()
424 for (sc->sc_test_pin = 2; sc->sc_test_pin < PXA270_GPIO_NPINS; sc->sc_test_pin++) { in wzero3kbd_attach()
425 if (sc->sc_test_pin != sc->sc_nouse_pin in wzero3kbd_attach()
426 && sc->sc_test_pin != sc->sc_nouse_pin2 in wzero3kbd_attach()
427 && sc->sc_test_pin != sc->sc_nouse_pin3 in wzero3kbd_attach()
428 && sc->sc_test_pin != sc->sc_key_pin in wzero3kbd_attach()
429 && sc->sc_test_pin != sc->sc_power_pin in wzero3kbd_attach()
430 && sc->sc_test_pin != sc->sc_reset_pin in wzero3kbd_attach()
431 && GPIO_IS_GPIO_OUT(pxa2x0_gpio_get_function(sc->sc_test_pin))) in wzero3kbd_attach()
434 if (sc->sc_test_pin < PXA270_GPIO_NPINS) { in wzero3kbd_attach()
435 printf("GPIO_OUT: GPIO pin #%d\n", sc->sc_test_pin); in wzero3kbd_attach()
437 sc->sc_test_pin = -1; in wzero3kbd_attach()
441 sc->sc_test_pin = 0x00; in wzero3kbd_attach()
442 sc->sc_bit = 0x01; in wzero3kbd_attach()
450 struct wzero3kbd_softc *sc = (struct wzero3kbd_softc *)arg; in wzero3kbd_intr() local
453 printf("wzero3kbd_intr: GPIO pin #%d = %s\n", sc->sc_key_pin, in wzero3kbd_intr()
454 pxa2x0_gpio_get_bit(sc->sc_key_pin) ? "on" : "off"); in wzero3kbd_intr()
458 if (sc->sc_test_pin >= 0) { in wzero3kbd_intr()
459 if (pxa2x0_gpio_get_bit(sc->sc_test_pin)) { in wzero3kbd_intr()
460 printf("GPIO_OUT: GPIO pin #%d: L\n",sc->sc_test_pin); in wzero3kbd_intr()
461 pxa2x0_gpio_clear_bit(sc->sc_test_pin); in wzero3kbd_intr()
463 printf("GPIO_OUT: GPIO pin #%d: H\n", sc->sc_test_pin); in wzero3kbd_intr()
464 pxa2x0_gpio_set_bit(sc->sc_test_pin); in wzero3kbd_intr()
470 sc->sc_test_pin, CSR_READ4(sc->sc_test_pin), sc->sc_bit); in wzero3kbd_intr()
471 if (CSR_READ4(sc->sc_test_pin) & sc->sc_bit) { in wzero3kbd_intr()
473 CSR_WRITE4(sc->sc_test_pin, in wzero3kbd_intr()
474 CSR_READ4(sc->sc_test_pin) & ~sc->sc_bit); in wzero3kbd_intr()
477 CSR_WRITE4(sc->sc_test_pin, in wzero3kbd_intr()
478 CSR_READ4(sc->sc_test_pin) | sc->sc_bit); in wzero3kbd_intr()
482 (void) wzero3kbd_poll1(sc); in wzero3kbd_intr()
484 pxa2x0_gpio_clear_intr(sc->sc_key_pin); in wzero3kbd_intr()
493 struct wzero3kbd_softc *sc = (struct wzero3kbd_softc *)arg; in wzero3kbd_intr2() local
495 printf("wzero3kbd_intr2: GPIO_IN: GPIO pin #%d = %s\n", sc->sc_test_pin, in wzero3kbd_intr2()
496 pxa2x0_gpio_get_bit(sc->sc_test_pin) ? "on" : "off"); in wzero3kbd_intr2()
519 struct wzero3kbd_softc *sc = (struct wzero3kbd_softc *)arg; in wzero3kbd_tick() local
521 (void) wzero3kbd_poll1(sc); in wzero3kbd_tick()
523 callout_schedule(&sc->sc_keyscan_ch, sc->sc_interval); in wzero3kbd_tick()
529 struct wzero3kbd_softc *sc = (struct wzero3kbd_softc *)arg; in wzero3kbd_power_intr() local
533 pxa2x0_gpio_get_bit(sc->sc_power_pin) ? "on" : "off"); in wzero3kbd_power_intr()
537 if (pxa2x0_gpio_get_bit(sc->sc_power_pin)) { in wzero3kbd_power_intr()
538 if (sc->sc_test_pin >= 0) { in wzero3kbd_power_intr()
539 int orig_pin = sc->sc_test_pin; in wzero3kbd_power_intr()
540 pxa2x0_gpio_intr_disestablish(sc->sc_test_ih); in wzero3kbd_power_intr()
541 sc->sc_test_ih = NULL; in wzero3kbd_power_intr()
544 if (++sc->sc_test_pin >= PXA270_GPIO_NPINS) in wzero3kbd_power_intr()
545 sc->sc_test_pin = 2; in wzero3kbd_power_intr()
546 if (sc->sc_test_pin == orig_pin) in wzero3kbd_power_intr()
548 if (sc->sc_test_pin != sc->sc_nouse_pin in wzero3kbd_power_intr()
549 && sc->sc_test_pin != sc->sc_nouse_pin2 in wzero3kbd_power_intr()
550 && sc->sc_test_pin != sc->sc_nouse_pin3 in wzero3kbd_power_intr()
551 && sc->sc_test_pin != sc->sc_key_pin in wzero3kbd_power_intr()
552 && sc->sc_test_pin != sc->sc_power_pin in wzero3kbd_power_intr()
553 && sc->sc_test_pin != sc->sc_reset_pin in wzero3kbd_power_intr()
554 … && GPIO_IS_GPIO_IN(pxa2x0_gpio_get_function(sc->sc_test_pin))) in wzero3kbd_power_intr()
557 if (sc->sc_test_pin != orig_pin) { in wzero3kbd_power_intr()
559 sc->sc_test_pin); in wzero3kbd_power_intr()
560 sc->sc_test_ih = in wzero3kbd_power_intr()
561 pxa2x0_gpio_intr_establish(sc->sc_test_pin, in wzero3kbd_power_intr()
562 IST_EDGE_BOTH, IPL_TTY, wzero3kbd_intr2,sc); in wzero3kbd_power_intr()
564 sc->sc_test_pin = -1; in wzero3kbd_power_intr()
571 if (pxa2x0_gpio_get_bit(sc->sc_power_pin)) { in wzero3kbd_power_intr()
572 sc->sc_enabled ^= 2; in wzero3kbd_power_intr()
573 if (sc->sc_enabled & 2) { in wzero3kbd_power_intr()
581 if (pxa2x0_gpio_get_bit(sc->sc_power_pin)) { in wzero3kbd_power_intr()
582 if (sc->sc_test_pin >= 0) { in wzero3kbd_power_intr()
583 int orig_pin = sc->sc_test_pin; in wzero3kbd_power_intr()
585 if (++sc->sc_test_pin >= PXA270_GPIO_NPINS) in wzero3kbd_power_intr()
586 sc->sc_test_pin = 2; in wzero3kbd_power_intr()
587 if (sc->sc_test_pin == orig_pin) in wzero3kbd_power_intr()
589 if (sc->sc_test_pin != sc->sc_nouse_pin in wzero3kbd_power_intr()
590 && sc->sc_test_pin != sc->sc_nouse_pin2 in wzero3kbd_power_intr()
591 && sc->sc_test_pin != sc->sc_nouse_pin3 in wzero3kbd_power_intr()
592 && sc->sc_test_pin != sc->sc_key_pin in wzero3kbd_power_intr()
593 && sc->sc_test_pin != sc->sc_power_pin in wzero3kbd_power_intr()
594 && sc->sc_test_pin != sc->sc_reset_pin in wzero3kbd_power_intr()
595 … && GPIO_IS_GPIO_OUT(pxa2x0_gpio_get_function(sc->sc_test_pin))) in wzero3kbd_power_intr()
598 if (sc->sc_test_pin != orig_pin) { in wzero3kbd_power_intr()
599 printf("GPIO_OUT: GPIO pin #%d\n", sc->sc_test_pin); in wzero3kbd_power_intr()
601 sc->sc_test_pin = -1; in wzero3kbd_power_intr()
607 if (pxa2x0_gpio_get_bit(sc->sc_power_pin)) { in wzero3kbd_power_intr()
608 sc->sc_bit <<= 1; in wzero3kbd_power_intr()
609 if (sc->sc_bit & ~0xff) { in wzero3kbd_power_intr()
610 sc->sc_bit = 0x01; in wzero3kbd_power_intr()
611 sc->sc_test_pin += 0x4; in wzero3kbd_power_intr()
612 if (sc->sc_test_pin >= 0x20) { in wzero3kbd_power_intr()
613 sc->sc_test_pin = 0x00; in wzero3kbd_power_intr()
616 printf("CPLD(%#x), mask=%#x\n", sc->sc_test_pin, sc->sc_bit); in wzero3kbd_power_intr()
620 pxa2x0_gpio_clear_intr(sc->sc_power_pin); in wzero3kbd_power_intr()
628 struct wzero3kbd_softc *sc = (struct wzero3kbd_softc *)arg; in wzero3kbd_reset_intr() local
630 sysmon_task_queue_sched(0, wzero3kbd_sysmon_reset_event, sc); in wzero3kbd_reset_intr()
632 pxa2x0_gpio_clear_intr(sc->sc_reset_pin); in wzero3kbd_reset_intr()
640 struct wzero3kbd_softc *sc = (struct wzero3kbd_softc *)arg; in wzero3kbd_input_establish() local
643 sc->sc_hpckbd = kbdif; in wzero3kbd_input_establish()
644 sc->sc_enabled = 1; in wzero3kbd_input_establish()
652 struct wzero3kbd_softc *sc = (struct wzero3kbd_softc *)arg; in wzero3kbd_sysmon_reset_event() local
654 sysmon_pswitch_event(&sc->sc_smpsw, PSWITCH_EVENT_PRESSED); in wzero3kbd_sysmon_reset_event()
670 struct wzero3kbd_softc *sc = (struct wzero3kbd_softc *)arg; in wzero3kbd_poll1() local
677 if (!sc->sc_enabled) { in wzero3kbd_poll1()
684 for (col = 0; col < sc->sc_ncolumn; col++) { in wzero3kbd_poll1()
701 for (row = 0; row < sc->sc_nrow; row++) { in wzero3kbd_poll1()
703 if (!(sc->sc_enabled & 2)) { in wzero3kbd_poll1()
705 sc->sc_keystat[row + col * sc->sc_nrow] = in wzero3kbd_poll1()
709 … printf("col = %d, row = %d, idx = %d, data = 0x%02x\n", col, row, row + col * sc->sc_nrow, data); in wzero3kbd_poll1()
724 for (i = 0; i < sc->sc_nrow * sc->sc_ncolumn; i++) { in wzero3kbd_poll1()
725 if (sc->sc_keystat[i] == sc->sc_okeystat[i]) in wzero3kbd_poll1()
728 keydown |= sc->sc_keystat[i]; in wzero3kbd_poll1()
729 hpckbd_input(sc->sc_hpckbd, sc->sc_keystat[i], i); in wzero3kbd_poll1()
730 sc->sc_okeystat[i] = sc->sc_keystat[i]; in wzero3kbd_poll1()