firmware: octsimtest: mcp23017 initializaiton

* driver should not have hard-coded understanding about I/O directions
* board code should pass the I/O direction to driver
* board code should use the correct I/O directions (A0..7, B0: output)

Change-Id: Id4a8e012a33cee01bb489e612e17920760b9be59
This commit is contained in:
Harald Welte
2021-06-03 13:19:46 +02:00
parent d46f6bae2c
commit dd5794c975
3 changed files with 20 additions and 10 deletions

View File

@@ -92,19 +92,25 @@ out_stop:
return 0;
}
int mcp23017_init(uint8_t slave)
int mcp23017_init(uint8_t slave, uint8_t iodira, uint8_t iodirb)
{
printf("mcp23017_init\n\r");
// all gpio input
if (mcp23017_write_byte(slave, MCP23017_IODIRA, 0xff))
return false;
if (mcp23017_write_byte(slave, MCP23017_IODIRA, iodira))
goto out_err;
// msb of portb output, rest input
if (mcp23017_write_byte(slave, MCP23017_IODIRB, 0x7f))
return false;
if (mcp23017_write_byte(slave, MCP23017_IODIRB, iodirb))
goto out_err;
if (mcp23017_write_byte(slave, MCP23017_IOCONA, 0x20)) //disable SEQOP (autoinc addressing)
return false;
goto out_err;
printf("mcp23017 found\n\r");
return true;
return 0;
out_err:
printf("mcp23017 NOT found!\n\r");
return -1;
}
int mcp23017_test(uint8_t slave)