summaryrefslogtreecommitdiff
path: root/io-module/mtdc_gpiob.c
diff options
context:
space:
mode:
Diffstat (limited to 'io-module/mtdc_gpiob.c')
-rw-r--r--io-module/mtdc_gpiob.c270
1 files changed, 0 insertions, 270 deletions
diff --git a/io-module/mtdc_gpiob.c b/io-module/mtdc_gpiob.c
deleted file mode 100644
index 7cd38a8..0000000
--- a/io-module/mtdc_gpiob.c
+++ /dev/null
@@ -1,270 +0,0 @@
-
-struct gpio_pin *dc_gpio_pin_by_attr_name(const char *name) {
- struct gpio_pin *pin;
- char *pin_attr_name;
-
- if (!strcmp(name, "led1")) {
- pin_attr_name = "dc-gpio1";
- } else if (!strcmp(name, "led2")) {
- pin_attr_name = "dc-gpio2";
- } else if (!strcmp(name, "dout-enable")) {
- pin_attr_name = "dc-gpio3";
- } else {
- log_error("accessory card attribute %s not available", name);
- return NULL;
- }
-
- for (pin = gpio_pins; *pin->name; pin++) {
- if (!strcmp(pin->pin.label, pin_attr_name)) {
- return pin;
- }
- }
-
- log_error("pin with attr name %s not found", name);
-
- return NULL;
-}
-
-
-static ssize_t mts_attr_show_dc_gpio_pin(struct device *dev,
- struct device_attribute *attr,
- char *buf)
-{
- int value;
- struct gpio_pin *pin = dc_gpio_pin_by_attr_name(attr->attr.name);
-
- if (!pin) {
- return -ENODEV;
- }
-
- mutex_lock(&mts_io_mutex);
-
- value = gpio_get_value(pin->pin.gpio);
-
- mutex_unlock(&mts_io_mutex);
-
- if (value < 0) {
- return value;
- }
-
- if (pin->active_low) {
- value = !value;
- }
-
- return sprintf(buf, "%d\n", value);
-}
-
-static ssize_t mts_attr_store_dc_gpio_pin(struct device *dev,
- struct device_attribute *attr, const char *buf, size_t count)
-{
- int value;
- struct gpio_pin *pin = dc_gpio_pin_by_attr_name(attr->attr.name);
-
- if (!pin) {
- return -ENODEV;
- }
-
- if (sscanf(buf, "%i", &value) != 1) {
- return -EINVAL;
- }
-
- if (pin->active_low) {
- value = !value;
- }
-
- mutex_lock(&mts_io_mutex);
-
- gpio_set_value(pin->pin.gpio, value);
-
- mutex_unlock(&mts_io_mutex);
-
- return count;
-}
-
-static ssize_t mts_attr_show_dc_din(struct device *dev, struct device_attribute *attr, char *buf)
-{
- int tmp;
- u8 bit;
- u8 byte;
-
- if (!spi_dc_din_dev) {
- log_error("dc din device not present");
- return -ENODEV;
- }
-
- if (!strcmp(attr->attr.name, "din0")) {
- bit = BIT(0);
- } else if (!strcmp(attr->attr.name, "din1")) {
- bit = BIT(1);
- } else if (!strcmp(attr->attr.name, "din2")) {
- bit = BIT(2);
- } else if (!strcmp(attr->attr.name, "din3")) {
- bit = BIT(3);
- } else {
- log_error("dc din attr does not exist");
- return -ENOENT;
- }
-
- tmp = spi_readn(spi_dc_din_dev, &byte, 1);
- if (tmp) {
- log_error("spi_read failed %d", tmp);
- return tmp;
- }
-
- tmp = byte & bit ? 1 : 0;
-
- return sprintf(buf, "%d\n", tmp);
-}
-
-static ssize_t mts_attr_store_dc_dout(struct device *dev, struct device_attribute *attr, const char *buf, size_t count)
-{
- int value;
- u8 bit;
-
- if (!spi_dc_dout_dev) {
- log_error("dc dout device not present");
- return -ENODEV;
- }
-
- if (!strcmp(attr->attr.name, "dout0")) {
- bit = BIT(0);
- } else if (!strcmp(attr->attr.name, "dout1")) {
- bit = BIT(1);
- } else if (!strcmp(attr->attr.name, "dout2")) {
- bit = BIT(2);
- } else if (!strcmp(attr->attr.name, "dout3")) {
- bit = BIT(3);
- } else {
- log_error("dc dout attr does not exist");
- return -ENOENT;
- }
-
- if (sscanf(buf, "%i", &value) != 1) {
- log_error("dc dout attr invalid argument");
- return -EINVAL;
- }
-
- mutex_lock(&spi_dc_dout_mutex);
-
- if (value) {
- spi_dc_dout_value &= ~bit;
- } else {
- spi_dc_dout_value |= bit;
- }
-
- spi_writen(spi_dc_dout_dev, &spi_dc_dout_value, 1);
-
- mutex_unlock(&spi_dc_dout_mutex);
-
- return count;
-}
-
-static ssize_t mts_attr_show_dc_dout(struct device *dev, struct device_attribute *attr, char *buf)
-{
- int value;
- u8 bit;
-
- if (!spi_dc_dout_dev) {
- log_error("dc dout device not present");
- return -ENODEV;
- }
-
- if (!strcmp(attr->attr.name, "dout0")) {
- bit = BIT(0);
- } else if (!strcmp(attr->attr.name, "dout1")) {
- bit = BIT(1);
- } else if (!strcmp(attr->attr.name, "dout2")) {
- bit = BIT(2);
- } else if (!strcmp(attr->attr.name, "dout3")) {
- bit = BIT(3);
- } else {
- log_error("dc dout attr does not exist");
- return -ENOENT;
- }
-
- mutex_lock(&spi_dc_dout_mutex);
-
- value = spi_dc_dout_value & bit ? 0 : 1;
-
- mutex_unlock(&spi_dc_dout_mutex);
-
- return sprintf(buf, "%d\n", value);
-}
-
-static ssize_t mts_attr_show_dc_adc(struct device *dev, struct device_attribute *attr, char *buf)
-{
- int tmp;
- int tx_data;
- int rx_data;
- int channel;
- int channel_mask = 0x0180; /* 0b 0000 0001 1000 0000 */
- int manual_mode = 0x1840; /* 0b 0001 1000 0100 0000 */
- uint8_t tx[2];
- uint8_t rx[2];
-
- if (!spi_dc_adc_dev) {
- log_error("dc adc device not present");
- return -ENODEV;
- }
-
- memset(tx, 0, sizeof(tx));
- memset(rx, 0, sizeof(rx));
-
- if (!strcmp(attr->attr.name, "adc0")) {
- channel = 0;
- } else if (!strcmp(attr->attr.name, "adc1")) {
- channel = 1;
- } else if (! strcmp(attr->attr.name, "adc2")) {
- channel = 2;
- } else {
- log_error("dc adc attr does not exist");
- return -ENOENT;
- }
-
- /* 1st transfer to set up (5V reference, channel to read from) */
- tx_data = manual_mode | ((channel << 7) & channel_mask);
- tx[0] = tx_data >> 8;
- tx[1] = tx_data & 0xFF;
- tmp = spi_writen(spi_dc_adc_dev, tx, 2);
- if (tmp) {
- log_error("spi_write failed %d", tmp);
- return tmp;
- }
-
- /* 2nd transfer to clock chip for ADC conversion
- * this can be a throw-away read or an empty write,
- * the ADC just needs the clock running so it can convert */
- tx[0] = 0;
- tx[1] = 0;
- tmp = spi_writen(spi_dc_adc_dev, tx, 2);
- if (tmp) {
- log_error("2nd spi_write failed %d", tmp);
- return tmp;
- }
-
- /* 3rd transfer to read data */
- tmp = spi_readn(spi_dc_adc_dev, rx, 2);
- if (tmp) {
- log_error("spi_read failed %d", tmp);
- return tmp;
- }
- rx_data = ((rx[0] & 0x0F) << 8) | (rx[1] & 0xFF);
-
- return sprintf(buf, "%lu\n", (unsigned long) rx_data);
-}
-
-/* MTDC-GPIOB */
-static DEVICE_ATTR_RO_MTS(dev_attr_dc_din0, "din0", mts_attr_show_dc_din);
-static DEVICE_ATTR_RO_MTS(dev_attr_dc_din1, "din1", mts_attr_show_dc_din);
-static DEVICE_ATTR_RO_MTS(dev_attr_dc_din2, "din2", mts_attr_show_dc_din);
-static DEVICE_ATTR_RO_MTS(dev_attr_dc_din3, "din3", mts_attr_show_dc_din);
-static DEVICE_ATTR_MTS(dev_attr_dc_dout0, "dout0", mts_attr_show_dc_dout, mts_attr_store_dc_dout);
-static DEVICE_ATTR_MTS(dev_attr_dc_dout1, "dout1", mts_attr_show_dc_dout, mts_attr_store_dc_dout);
-static DEVICE_ATTR_MTS(dev_attr_dc_dout2, "dout2", mts_attr_show_dc_dout, mts_attr_store_dc_dout);
-static DEVICE_ATTR_MTS(dev_attr_dc_dout3, "dout3", mts_attr_show_dc_dout, mts_attr_store_dc_dout);
-static DEVICE_ATTR_RO_MTS(dev_attr_dc_adc0, "adc0", mts_attr_show_dc_adc);
-static DEVICE_ATTR_RO_MTS(dev_attr_dc_adc1, "adc1", mts_attr_show_dc_adc);
-static DEVICE_ATTR_RO_MTS(dev_attr_dc_adc2, "adc2", mts_attr_show_dc_adc);
-static DEVICE_ATTR_MTS(dev_attr_dc_led1, "led1", mts_attr_show_dc_gpio_pin, mts_attr_store_dc_gpio_pin);
-static DEVICE_ATTR_MTS(dev_attr_dc_led2, "led2", mts_attr_show_dc_gpio_pin, mts_attr_store_dc_gpio_pin);
-static DEVICE_ATTR_MTS(dev_attr_dc_oe, "dout-enable", mts_attr_show_dc_gpio_pin, mts_attr_store_dc_gpio_pin);