Comments
Patch
@@ -54,6 +54,10 @@ struct rayer_pinout {
int sck_bit;
int mosi_bit;
int miso_bit;
+ int cs_inverted;
+ int sck_inverted;
+ int mosi_inverted;
+ int miso_inverted;
void (*preinit)(void *);
int (*shutdown)(void *);
};
@@ -92,6 +96,7 @@ static struct rayer_pinout altera_bytebl
.sck_bit = 0,
.mosi_bit = 6,
.miso_bit = 7,
+ .miso_inverted = 1,
.preinit = byteblaster_preinit,
.shutdown = byteblaster_shutdown,
};
@@ -113,6 +118,7 @@ static struct rayer_pinout wiggler_lpt =
.sck_bit = 2,
.mosi_bit = 3,
.miso_bit = 7,
+ .miso_inverted = 1,
};
struct rayer_programmer rayer_spi_types[] = {
@@ -134,6 +140,8 @@ static uint8_t lpt_outbyte;
static void rayer_bitbang_set_cs(int val)
{
+ if (pinout->cs_inverted)
+ val = !val;
lpt_outbyte &= ~(1 << pinout->cs_bit);
lpt_outbyte |= (val << pinout->cs_bit);
OUTB(lpt_outbyte, lpt_iobase);
@@ -141,6 +149,8 @@ static void rayer_bitbang_set_cs(int val
static void rayer_bitbang_set_sck(int val)
{
+ if (pinout->sck_inverted)
+ val = !val;
lpt_outbyte &= ~(1 << pinout->sck_bit);
lpt_outbyte |= (val << pinout->sck_bit);
OUTB(lpt_outbyte, lpt_iobase);
@@ -148,6 +158,8 @@ static void rayer_bitbang_set_sck(int va
static void rayer_bitbang_set_mosi(int val)
{
+ if (pinout->mosi_inverted)
+ val = !val;
lpt_outbyte &= ~(1 << pinout->mosi_bit);
lpt_outbyte |= (val << pinout->mosi_bit);
OUTB(lpt_outbyte, lpt_iobase);
@@ -157,8 +169,10 @@ static int rayer_bitbang_get_miso(void)
{
uint8_t tmp;
- tmp = INB(lpt_iobase + 1) ^ 0x80; // bit.7 inverted
+ tmp = INB(lpt_iobase + 1);
tmp = (tmp >> pinout->miso_bit) & 0x1;
+ if (pinout->miso_inverted)
+ tmp = !tmp;
return tmp;
}
Add signal inversion support for all signals and remove the bit 7 hack in rayer_bitbang_get_miso(). Signed-off-by: Ondrej Zary <linux@rainbow-software.org>