diff options
author | Uwe Stuehler <uwe@cvs.openbsd.org> | 2005-01-31 03:02:17 +0000 |
---|---|---|
committer | Uwe Stuehler <uwe@cvs.openbsd.org> | 2005-01-31 03:02:17 +0000 |
commit | 806e7e944013f40c77790495620e5855e8c0aff2 (patch) | |
tree | 9b2002d94ab93aff202e60726eb7b4b3b6738b24 | |
parent | 25d39b7ce2f8a7864a91df29ee4ffdddb501ad56 (diff) |
Use pxa2x0_gpio_get_function() to restore alternate pin functions
correctly after writes to the backlight DAC.
-rw-r--r-- | sys/arch/zaurus/dev/zaurus_ssp.c | 61 |
1 files changed, 31 insertions, 30 deletions
diff --git a/sys/arch/zaurus/dev/zaurus_ssp.c b/sys/arch/zaurus/dev/zaurus_ssp.c index 842fb89ad2e..3f3832669e9 100644 --- a/sys/arch/zaurus/dev/zaurus_ssp.c +++ b/sys/arch/zaurus/dev/zaurus_ssp.c @@ -1,4 +1,4 @@ -/* $OpenBSD: zaurus_ssp.c,v 1.3 2005/01/31 02:22:17 uwe Exp $ */ +/* $OpenBSD: zaurus_ssp.c,v 1.4 2005/01/31 03:02:16 uwe Exp $ */ /* * Copyright (c) 2005 Uwe Stuehler <uwe@bsdx.de> @@ -203,34 +203,39 @@ void zssp_write_lz9jg18(u_int32_t data) { int s; + int sclk_pin, sclk_fn; + int sfrm_pin, sfrm_fn; + int txd_pin, txd_fn; + int rxd_pin, rxd_fn; int i; - int ssp_sclk; - int ssp_sfrm; - int ssp_txd; - int ssp_rxd; /* XXX this creates a DAC command from a backlight duty value. */ data = 0x40 | (data & 0x1f); if ((cputype & ~CPU_ID_XSCALE_COREREV_MASK) == CPU_ID_PXA27X) { /* C3000 */ - ssp_sclk = 19; - ssp_sfrm = 14; - ssp_txd = 87; - ssp_rxd = 86; + sclk_pin = 19; + sfrm_pin = 14; + txd_pin = 87; + rxd_pin = 86; } else { - ssp_sclk = 23; - ssp_sfrm = 24; - ssp_txd = 25; - ssp_rxd = 26; + sclk_pin = 23; + sfrm_pin = 24; + txd_pin = 25; + rxd_pin = 26; } s = splhigh(); - pxa2x0_gpio_set_function(ssp_sfrm, GPIO_OUT | GPIO_SET); - pxa2x0_gpio_set_function(ssp_sclk, GPIO_OUT | GPIO_CLR); - pxa2x0_gpio_set_function(ssp_txd, GPIO_OUT | GPIO_CLR); - pxa2x0_gpio_set_function(ssp_rxd, GPIO_IN); + sclk_fn = pxa2x0_gpio_get_function(sclk_pin); + sfrm_fn = pxa2x0_gpio_get_function(sfrm_pin); + txd_fn = pxa2x0_gpio_get_function(txd_pin); + rxd_fn = pxa2x0_gpio_get_function(rxd_pin); + + pxa2x0_gpio_set_function(sfrm_pin, GPIO_OUT | GPIO_SET); + pxa2x0_gpio_set_function(sclk_pin, GPIO_OUT | GPIO_CLR); + pxa2x0_gpio_set_function(txd_pin, GPIO_OUT | GPIO_CLR); + pxa2x0_gpio_set_function(rxd_pin, GPIO_IN); pxa2x0_gpio_set_bit(GPIO_MAX1111_CS_C3000); pxa2x0_gpio_set_bit(GPIO_ADS7846_CS_C3000); @@ -240,28 +245,24 @@ zssp_write_lz9jg18(u_int32_t data) for (i = 0; i < 8; i++) { if (data & 0x80) - pxa2x0_gpio_set_bit(ssp_txd); + pxa2x0_gpio_set_bit(txd_pin); else - pxa2x0_gpio_clear_bit(ssp_txd); + pxa2x0_gpio_clear_bit(txd_pin); delay(10); - pxa2x0_gpio_set_bit(ssp_sclk); + pxa2x0_gpio_set_bit(sclk_pin); delay(10); - pxa2x0_gpio_clear_bit(ssp_sclk); + pxa2x0_gpio_clear_bit(sclk_pin); delay(10); data <<= 1; } - pxa2x0_gpio_clear_bit(ssp_txd); + pxa2x0_gpio_clear_bit(txd_pin); pxa2x0_gpio_set_bit(GPIO_TG_CS_C3000); - /* XXX SFRM and RXD alternate functions are not restored here. */ - if ((cputype & ~CPU_ID_XSCALE_COREREV_MASK) == CPU_ID_PXA27X) { - pxa2x0_gpio_set_function(ssp_sclk, GPIO_ALT_FN_1_OUT); - pxa2x0_gpio_set_function(ssp_txd, GPIO_ALT_FN_1_OUT); - } else { - pxa2x0_gpio_set_function(ssp_sclk, GPIO_ALT_FN_2_OUT); - pxa2x0_gpio_set_function(ssp_txd, GPIO_ALT_FN_2_OUT); - } + pxa2x0_gpio_set_function(sclk_pin, sclk_fn); + pxa2x0_gpio_set_function(sfrm_pin, sfrm_fn); + pxa2x0_gpio_set_function(txd_pin, txd_fn); + pxa2x0_gpio_set_function(rxd_pin, rxd_fn); splx(s); } |