summaryrefslogtreecommitdiff
path: root/io-module/spi.c
diff options
context:
space:
mode:
Diffstat (limited to 'io-module/spi.c')
-rw-r--r--io-module/spi.c248
1 files changed, 192 insertions, 56 deletions
diff --git a/io-module/spi.c b/io-module/spi.c
index dfbdfe2..df663ae 100644
--- a/io-module/spi.c
+++ b/io-module/spi.c
@@ -40,29 +40,32 @@ MODULE_PARM_DESC(
"Maximum clock rate to be used with this device (default: 1 MHz)"
);
-static struct spi_device *spi_dc_dout_dev;
-static u8 spi_dc_dout_value;
-static DEFINE_MUTEX(spi_dc_dout_mutex);
-static unsigned int dc_dout_max_speed_hz = 1 * 1000 * 1000;
-module_param(dc_dout_max_speed_hz, uint, S_IRUGO);
+static struct spi_device *spi_ap1_dout_dev;
+static struct spi_device *spi_ap2_dout_dev;
+static u8 spi_ap_dout_value;
+static DEFINE_MUTEX(spi_ap_dout_mutex);
+static unsigned int ap_dout_max_speed_hz = 1 * 1000 * 1000;
+module_param(ap_dout_max_speed_hz, uint, S_IRUGO);
MODULE_PARM_DESC(
- dc_dout_max_speed_hz,
+ ap_dout_max_speed_hz,
"Maximum clock rate to be used with this device (default: 1 MHz)"
);
-static struct spi_device *spi_dc_din_dev;
-static unsigned int dc_din_max_speed_hz = 1 * 1000 * 1000;
-module_param(dc_din_max_speed_hz, uint, S_IRUGO);
+static struct spi_device *spi_ap1_din_dev;
+static struct spi_device *spi_ap2_din_dev;
+static unsigned int ap_din_max_speed_hz = 1 * 1000 * 1000;
+module_param(ap_din_max_speed_hz, uint, S_IRUGO);
MODULE_PARM_DESC(
- dc_din_max_speed_hz,
+ ap_din_max_speed_hz,
"Maximum clock rate to be used with this device (default: 1 MHz)"
);
-static struct spi_device *spi_dc_adc_dev;
-static unsigned int dc_adc_max_speed_hz = 20 * 1000 * 1000;
-module_param(dc_adc_max_speed_hz, uint, S_IRUGO);
+static struct spi_device *spi_ap1_adc_dev;
+static struct spi_device *spi_ap2_adc_dev;
+static unsigned int ap_adc_max_speed_hz = 20 * 1000 * 1000;
+module_param(ap_adc_max_speed_hz, uint, S_IRUGO);
MODULE_PARM_DESC(
- dc_adc_max_speed_hz,
+ ap_adc_max_speed_hz,
"Maximum clock rate to be used with this device (default: 20 MHz)"
);
@@ -595,137 +598,270 @@ static struct spi_driver mts_spi_din_driver = {
.remove = mts_spi_din_remove,
};
-static int mts_spi_dc_dout_probe(struct spi_device *spi)
+static int mts_spi_ap1_dout_probe(struct spi_device *spi)
{
int tmp;
- if (! has_accessory_card_port_1 || mts_ap1_product_id != MTDC_GPIOB_0_0) {
- log_error("accessory card digital outputs not available");
+ if (! have_accessory_card_slot_1 || mts_ap1_product_id != MTDC_GPIOB_0_0) {
+ log_error("accessory card 1 digital outputs not available");
return -ENODEV;
}
- spi->max_speed_hz = dc_dout_max_speed_hz;
+ spi->max_speed_hz = ap_dout_max_speed_hz;
spi->mode = 0;
- log_debug("dc_dout_max_speed_hz: %d", dc_dout_max_speed_hz);
+ log_debug("ap1_dout_max_speed_hz: %d", ap_dout_max_speed_hz);
tmp = spi_setup(spi);
if (tmp < 0) {
- log_error("spi_setup dc dout failed");
+ log_error("spi_setup accessory card 1 dout failed");
return tmp;
}
- spi_dc_dout_value = 0x00;
- spi_writen(spi, &spi_dc_dout_value, 1);
+ spi_ap_dout_value = 0x00;
+ spi_writen(spi, &spi_ap_dout_value, 1);
- spi_dc_dout_dev = spi;
+ spi_ap1_dout_dev = spi;
return 0;
}
-static int mts_spi_dc_dout_remove(struct spi_device *spi)
+static int mts_spi_ap1_dout_remove(struct spi_device *spi)
{
- spi_dc_dout_dev = NULL;
+ spi_ap1_dout_dev = NULL;
return 0;
}
-static struct spi_driver mts_spi_dc_dout_driver = {
+static struct spi_driver mts_spi_ap1_dout_driver = {
.driver = {
- .name = "mts-io-dc-dout",
+ .name = "mts-io-ap1-dout",
.bus = &spi_bus_type,
.owner = THIS_MODULE,
},
- .probe = mts_spi_dc_dout_probe,
- .remove = mts_spi_dc_dout_remove,
+ .probe = mts_spi_ap1_dout_probe,
+ .remove = mts_spi_ap1_dout_remove,
};
-static int mts_spi_dc_din_probe(struct spi_device *spi)
+static int mts_spi_ap1_din_probe(struct spi_device *spi)
{
int tmp;
- if (! has_accessory_card_port_1 || mts_ap1_product_id != MTDC_GPIOB_0_0) {
- log_error("accessory card digital inputs not available");
+ if (! have_accessory_card_slot_1 || mts_ap1_product_id != MTDC_GPIOB_0_0) {
+ log_error("accessory card 1 digital inputs not available");
return -ENODEV;
}
- spi->max_speed_hz = dc_din_max_speed_hz;
+ spi->max_speed_hz = ap_din_max_speed_hz;
spi->mode = SPI_CPOL;
- log_debug("dc_din_max_speed_hz: %d", dc_din_max_speed_hz);
+ log_debug("ap1_din_max_speed_hz: %d", ap_din_max_speed_hz);
tmp = spi_setup(spi);
if (tmp < 0) {
- log_error("spi_setup daughter card din failed");
+ log_error("spi_setup accessory card 1 din failed");
return tmp;
}
- spi_dc_din_dev = spi;
+ spi_ap1_din_dev = spi;
return 0;
}
-static int mts_spi_dc_din_remove(struct spi_device *spi)
+static int mts_spi_ap1_din_remove(struct spi_device *spi)
{
- spi_dc_din_dev = NULL;
+ spi_ap1_din_dev = NULL;
return 0;
}
-static struct spi_driver mts_spi_dc_din_driver = {
+static struct spi_driver mts_spi_ap1_din_driver = {
.driver = {
- .name = "mts-io-dc-din",
+ .name = "mts-io-ap1-din",
.bus = &spi_bus_type,
.owner = THIS_MODULE,
},
- .probe = mts_spi_dc_din_probe,
- .remove = mts_spi_dc_din_remove,
+ .probe = mts_spi_ap1_din_probe,
+ .remove = mts_spi_ap1_din_remove,
};
-static int mts_spi_dc_adc_probe(struct spi_device *spi)
+static int mts_spi_ap1_adc_probe(struct spi_device *spi)
{
int tmp;
- if (! has_accessory_card_port_1 || mts_ap1_product_id != MTDC_GPIOB_0_0) {
- log_error("accessory card analog to digital not available");
+ if (! have_accessory_card_slot_1 || mts_ap1_product_id != MTDC_GPIOB_0_0) {
+ log_error("accessory card 1 analog to digital not available");
return -ENODEV;
}
- spi->max_speed_hz = dc_adc_max_speed_hz;
+ spi->max_speed_hz = ap_adc_max_speed_hz;
spi->mode = 0;
- log_debug("dc_adc_max_speed_hz: %d", dc_adc_max_speed_hz);
- log_debug("dc_adc_mode: %d", spi->mode);
+ log_debug("ap1_adc_max_speed_hz: %d", ap_adc_max_speed_hz);
+ log_debug("ap1_adc_mode: %d", spi->mode);
tmp = spi_setup(spi);
if (tmp < 0) {
- log_error("spi_setup daughter card adc failed");
+ log_error("spi_setup accessory card 1 adc failed");
return tmp;
}
- spi_dc_adc_dev = spi;
+ spi_ap1_adc_dev = spi;
return 0;
}
-static int mts_spi_dc_adc_remove(struct spi_device *spi)
+static int mts_spi_ap1_adc_remove(struct spi_device *spi)
{
- spi_dc_adc_dev = NULL;
+ spi_ap1_adc_dev = NULL;
return 0;
}
-static struct spi_driver mts_spi_dc_adc_driver = {
+static struct spi_driver mts_spi_ap1_adc_driver = {
.driver = {
- .name = "mts-io-dc-adc",
+ .name = "mts-io-ap1-adc",
.bus = &spi_bus_type,
.owner = THIS_MODULE,
},
- .probe = mts_spi_dc_adc_probe,
- .remove = mts_spi_dc_adc_remove,
+ .probe = mts_spi_ap1_adc_probe,
+ .remove = mts_spi_ap1_adc_remove,
+};
+
+static int mts_spi_ap2_dout_probe(struct spi_device *spi)
+{
+ int tmp;
+
+ if (! have_accessory_card_slot_2 || mts_ap2_product_id != MTDC_GPIOB_0_0) {
+ log_error("accessory card 2 digital outputs not available");
+ return -ENODEV;
+ }
+
+ spi->max_speed_hz = ap_dout_max_speed_hz;
+ spi->mode = 0;
+
+ log_debug("ap2_dout_max_speed_hz: %d", ap_dout_max_speed_hz);
+
+ tmp = spi_setup(spi);
+ if (tmp < 0) {
+ log_error("spi_setup accessory card 2 dout failed");
+ return tmp;
+ }
+
+ spi_ap_dout_value = 0x00;
+ spi_writen(spi, &spi_ap_dout_value, 2);
+
+ spi_ap2_dout_dev = spi;
+
+ return 0;
+}
+
+static int mts_spi_ap2_dout_remove(struct spi_device *spi)
+{
+ spi_ap2_dout_dev = NULL;
+
+ return 0;
+}
+
+static struct spi_driver mts_spi_ap2_dout_driver = {
+ .driver = {
+ .name = "mts-io-ap2-dout",
+ .bus = &spi_bus_type,
+ .owner = THIS_MODULE,
+ },
+
+ .probe = mts_spi_ap2_dout_probe,
+ .remove = mts_spi_ap2_dout_remove,
+};
+
+static int mts_spi_ap2_din_probe(struct spi_device *spi)
+{
+ int tmp;
+
+ if (! have_accessory_card_slot_2 || mts_ap2_product_id != MTDC_GPIOB_0_0) {
+ log_error("accessory card 2 digital inputs not available");
+ return -ENODEV;
+ }
+
+ spi->max_speed_hz = ap_din_max_speed_hz;
+ spi->mode = SPI_CPOL;
+
+ log_debug("ap2_din_max_speed_hz: %d", ap_din_max_speed_hz);
+
+ tmp = spi_setup(spi);
+ if (tmp < 0) {
+ log_error("spi_setup accessory card 2 din failed");
+ return tmp;
+ }
+
+ spi_ap2_din_dev = spi;
+
+ return 0;
+}
+
+static int mts_spi_ap2_din_remove(struct spi_device *spi)
+{
+ spi_ap2_din_dev = NULL;
+
+ return 0;
+}
+
+static struct spi_driver mts_spi_ap2_din_driver = {
+ .driver = {
+ .name = "mts-io-ap2-din",
+ .bus = &spi_bus_type,
+ .owner = THIS_MODULE,
+ },
+
+ .probe = mts_spi_ap2_din_probe,
+ .remove = mts_spi_ap2_din_remove,
+};
+
+static int mts_spi_ap2_adc_probe(struct spi_device *spi)
+{
+ int tmp;
+
+ if (! have_accessory_card_slot_2 || mts_ap2_product_id != MTDC_GPIOB_0_0) {
+ log_error("accessory card 2 analog to digital not available");
+ return -ENODEV;
+ }
+
+ spi->max_speed_hz = ap_adc_max_speed_hz;
+ spi->mode = 0;
+
+ log_debug("ap2_adc_max_speed_hz: %d", ap_adc_max_speed_hz);
+ log_debug("ap2_adc_mode: %d", spi->mode);
+
+ tmp = spi_setup(spi);
+ if (tmp < 0) {
+ log_error("spi_setup accessory card 2 adc failed");
+ return tmp;
+ }
+
+ spi_ap2_adc_dev = spi;
+
+ return 0;
+}
+
+static int mts_spi_ap2_adc_remove(struct spi_device *spi)
+{
+ spi_ap2_adc_dev = NULL;
+
+ return 0;
+}
+
+static struct spi_driver mts_spi_ap2_adc_driver = {
+ .driver = {
+ .name = "mts-io-ap2-adc",
+ .bus = &spi_bus_type,
+ .owner = THIS_MODULE,
+ },
+
+ .probe = mts_spi_ap2_adc_probe,
+ .remove = mts_spi_ap2_adc_remove,
};
static int mts_spi_board_temp_probe(struct spi_device *spi)