From 5d63a009c8d41c63fcbf03569ed99588bd5b48df Mon Sep 17 00:00:00 2001 From: Werner Almesberger Date: Thu, 11 Nov 2010 02:29:07 -0300 Subject: [PATCH] libatspi: new function atspi_test_mode to enter test mode - include/atspi.h, lib/atspi.c: new function atspi_test_mode to enter test mode - lib/driver.h (struct atspi_driver): add backend function test_mode - lib/atusb.c (atusb_test_mode), lib/atusb.c (atusb_driver): enter test mode - lib/atusd.c (atusd_driver): test mode is not supported --- tools/include/atspi.h | 1 + tools/lib/atspi.c | 9 +++++++++ tools/lib/atusb.c | 18 ++++++++++++++++++ tools/lib/atusd.c | 1 + tools/lib/driver.h | 1 + 5 files changed, 30 insertions(+) diff --git a/tools/include/atspi.h b/tools/include/atspi.h index 1663b55..aa188bf 100644 --- a/tools/include/atspi.h +++ b/tools/include/atspi.h @@ -29,6 +29,7 @@ int atspi_clear_error(struct atspi_dsc *dsc); void atspi_reset(struct atspi_dsc *dsc); void atspi_reset_rf(struct atspi_dsc *dsc); +int atspi_test_mode(struct atspi_dsc *dsc); void atspi_reg_write(struct atspi_dsc *dsc, uint8_t reg, uint8_t value); uint8_t atspi_reg_read(struct atspi_dsc *dsc, uint8_t reg); diff --git a/tools/lib/atspi.c b/tools/lib/atspi.c index a4ad987..023d20b 100644 --- a/tools/lib/atspi.c +++ b/tools/lib/atspi.c @@ -99,6 +99,15 @@ void atspi_reset_rf(struct atspi_dsc *dsc) } +int atspi_test_mode(struct atspi_dsc *dsc) +{ + if (!dsc->driver->test_mode) + return 0; + dsc->driver->test_mode(dsc->handle); + return 1; +} + + void atspi_reg_write(struct atspi_dsc *dsc, uint8_t reg, uint8_t value) { dsc->driver->reg_write(dsc->handle, reg, value); diff --git a/tools/lib/atusb.c b/tools/lib/atusb.c index 070bba7..3aecb46 100644 --- a/tools/lib/atusb.c +++ b/tools/lib/atusb.c @@ -108,6 +108,23 @@ static void atusb_reset_rf(void *dsc) } +static void atusb_test_mode(void *dsc) +{ + usb_dev_handle *dev = dsc; + int res; + + if (error) + return; + + res = + usb_control_msg(dev, TO_DEV, ATSPI_TEST, 0, 0, NULL, 0, 1000); + if (res < 0) { + fprintf(stderr, "ATSPI_TEST: %d\n", res); + error = 1; + } +} + + /* ----- register access --------------------------------------------------- */ @@ -221,6 +238,7 @@ struct atspi_driver atusb_driver = { .clear_error = atusb_clear_error, .reset = atusb_reset, .reset_rf = atusb_reset_rf, + .test_mode = atusb_test_mode, .reg_write = atusb_reg_write, .reg_read = atusb_reg_read, .buf_write = atusb_buf_write, diff --git a/tools/lib/atusd.c b/tools/lib/atusd.c index fe2ca96..176d5de 100644 --- a/tools/lib/atusd.c +++ b/tools/lib/atusd.c @@ -320,6 +320,7 @@ struct atspi_driver atusd_driver = { .close = atusd_close, .reset = NULL, .reset_rf = atusd_reset_rf, + .test_mode = NULL, .reg_write = atusd_reg_write, .reg_read = atusd_reg_read, .buf_write = atusd_buf_write, diff --git a/tools/lib/driver.h b/tools/lib/driver.h index 35e0303..d5e309b 100644 --- a/tools/lib/driver.h +++ b/tools/lib/driver.h @@ -25,6 +25,7 @@ struct atspi_driver { int (*clear_error)(void *dsc); void (*reset)(void *dsc); void (*reset_rf)(void *dsc); + void (*test_mode)(void *dsc); void (*reg_write)(void *dsc, uint8_t reg, uint8_t value); uint8_t (*reg_read)(void *dsc, uint8_t reg); void (*buf_write)(void *dsc, const void *buf, int size);