diff options
| author | Jeff Hatch <jhatch@multitech.com> | 2019-05-21 15:33:35 -0500 | 
|---|---|---|
| committer | John Klug <john.klug@multitech.com> | 2019-05-23 10:07:32 -0500 | 
| commit | c26350b127f9673b82429aa553a3cbcfe8fd7113 (patch) | |
| tree | d5ef253f2014f65107537ed7c16d1f6189aa55e2 | |
| parent | f4213f291c0a0d708333bf078c87304ddaac289a (diff) | |
| download | mts-io-c26350b127f9673b82429aa553a3cbcfe8fd7113.tar.gz mts-io-c26350b127f9673b82429aa553a3cbcfe8fd7113.tar.bz2 mts-io-c26350b127f9673b82429aa553a3cbcfe8fd7113.zip | |
Updates to add support for MTQ-MTR as hw-version MTRV1-0_3
| -rw-r--r-- | io-module/mtr.c | 351 | ||||
| -rw-r--r-- | io-module/mts-io.c | 18 | ||||
| -rw-r--r-- | io-module/mts_io_module.h | 8 | 
3 files changed, 367 insertions, 10 deletions
| diff --git a/io-module/mtr.c b/io-module/mtr.c index 171c182..e47beae 100644 --- a/io-module/mtr.c +++ b/io-module/mtr.c @@ -1199,6 +1199,267 @@ static struct gpio_pin gpio_pins_mtrv1_0_2[] = {  	{ },  }; +static struct gpio_pin gpio_pins_mtrv1_0_3[] = { +       { +               .name = "ETH_RESET", +               .pin = { +                       .gpio = AT91_PIN_PC6, +                       .flags = GPIOF_OUT_INIT_HIGH | GPIOF_OPEN_DRAIN,  /* without GPIOF_OPEN_DRAIN causes issues with the Micrel KSZ8091RNBCA (RMII) PHY */ +                       .label = "eth-reset", +               }, +               .active_low = 0, +       }, +       { +               .name = "DEVICE_RESET", +               .pin = { +                       .gpio = AT91_PIN_PC4, +                       .flags = GPIOF_IN, +                       .label = "reset", +               }, +               .active_low = 1, +       }, +       { +               .name = "LS_LED", +               .pin = { +                       .gpio = AT91_PIN_PC4, +#if LED_LS_CONTROLLABLE +                       .flags = GPIOF_OUT_INIT_HIGH, +#else +                       .flags = GPIOF_IN, +#endif +                       .label = "led-ls", +               }, +               .active_low = 1, +       }, +       { +               .name = "STATUS_LED", +               .pin = { +                       .gpio = AT91_PIN_PC21, +                       .flags = GPIOF_OUT_INIT_LOW, +                       .label = "led-status", +               }, +               .active_low = 1, +       }, +       { +               .name = "LED3", +               .pin = { +                       .gpio = AT91_PIN_PC15, +                       .flags = GPIOF_OUT_INIT_HIGH, +                       .label = "led-wifi", +               }, +               .active_low = 1, +       }, +       { +               .name = "LED3", +               .pin = { +                       .gpio = AT91_PIN_PC15, +                       .flags = GPIOF_OUT_INIT_HIGH, +                       .label = "led-b", +               }, +               .active_low = 1, +       }, +       { +               .name = "LED4", +               .pin = { +                       .gpio = AT91_PIN_PC20, +                       .flags = GPIOF_OUT_INIT_HIGH, +                       .label = "led-cd", +               }, +               .active_low = 1, +       }, +       { +               .name = "LED4", +               .pin = { +                       .gpio = AT91_PIN_PC20, +                       .flags = GPIOF_OUT_INIT_HIGH, +                       .label = "led-c", +               }, +               .active_low = 1, +       }, +       { +               .name = "LED6", +               .pin = { +                       .gpio = AT91_PIN_PC19, +                       .flags = GPIOF_OUT_INIT_HIGH, +                       .label = "led-sig1", +               }, +               .active_low = 1, +       }, +       { +               .name = "LED6", +               .pin = { +                       .gpio = AT91_PIN_PC19, +                       .flags = GPIOF_OUT_INIT_HIGH, +                       .label = "led-d", +               }, +               .active_low = 1, +       }, +       { +               .name = "LED7", +               .pin = { +                       .gpio = AT91_PIN_PC18, +                       .flags = GPIOF_OUT_INIT_HIGH, +                       .label = "led-sig2", +               }, +               .active_low = 1, +       }, +       { +               .name = "LED7", +               .pin = { +                       .gpio = AT91_PIN_PC18, +                       .flags = GPIOF_OUT_INIT_HIGH, +                       .label = "led-e", +               }, +               .active_low = 1, +       }, +       { +               .name = "LED8", +               .pin = { +                       .gpio = AT91_PIN_PC17, +                       .flags = GPIOF_OUT_INIT_HIGH, +                       .label = "led-sig3", +               }, +               .active_low = 1, +       }, +       { +               .name = "LED8", +               .pin = { +                       .gpio = AT91_PIN_PC17, +                       .flags = GPIOF_OUT_INIT_HIGH, +                       .label = "led-f", +               }, +               .active_low = 1, +       }, +       { +               .name = "RI_B", +               .pin = { +                       .gpio = AT91_PIN_PC25, +                       .flags = GPIOF_OUT_INIT_HIGH, +                       .label = "extserial-ri", +               }, +               .active_low = 1, +       }, +       { +               .name = "DTR_B", +               .pin = { +                       .gpio = AT91_PIN_PC26, +                       .flags = GPIOF_IN, +                       .label = "extserial-dtr", +               }, +               .active_low = 1, +       }, +       { +               .name = "DSR_B", +               .pin = { +                       .gpio = AT91_PIN_PC27, +                       .flags = GPIOF_OUT_INIT_HIGH, +                       .label = "extserial-dsr", +               }, +               .active_low = 1, +       }, +       { +               .name = "DCD_B", +               .pin = { +                       .gpio = AT91_PIN_PC28, +                       .flags = GPIOF_OUT_INIT_HIGH, +                       .label = "extserial-dcd", +               }, +               .active_low = 1, +       }, + +       // The difference between MTRv1_0_0 and MTRv1_0_1 starts here +      { +               .name = "WIFI_BT_ULPWKUP", +               .pin = { +                       .gpio = AT91_PIN_PA0, +                       .flags = GPIOF_IN, +                       .label = "wifi-bt-ulpwkup", +               } +       }, +      { +               .name = "WIFI_BT_LPWKUP", +               .pin = { +                       .gpio = AT91_PIN_PA6, +                       .flags = GPIOF_IN, +                       .label = "wifi-bt-lpwkup", +               } +       }, +       { +               .name = "WIFI_BT_INT", +               .pin = { +                       .gpio = AT91_PIN_PB11, +                       .flags = GPIOF_IN, +                       .label = "wifi-bt-int", +               } +       }, +       { +               .name = "WIFI_BT_RESET", +               .pin = { +                       .gpio = AT91_PIN_PD14, +                       .flags = GPIOF_OUT_INIT_HIGH, +                       .label = "wifi-bt-reset", +               } +       }, +       { +               .name = "WIFI_BT_LPMODE", +               .pin = { +                       .gpio = AT91_PIN_PD20, +                       .flags = GPIOF_IN, +                       .label = "wifi-bt-lpmode", +               } +       }, +       { +               .name = "GNSS_RESET", +               .pin = { +                       .gpio = AT91_PIN_PD15, +                       .flags = GPIOF_OUT_INIT_HIGH, +                       .label = "gnss-reset", +               } +       }, +       { +               .name = "SECURE_RESET", +               .pin = { +                       .gpio = AT91_PIN_PD16, +                       .flags = GPIOF_OUT_INIT_HIGH, +                       .label = "secure-reset", +               } +       }, +       { +               .name = "MTQ_RESET", +               .pin = { +                       .gpio = AT91_PIN_PD17, +                       .flags = GPIOF_OUT_INIT_HIGH, +                       .label = "radio-reset", +               } +       }, +       { +               .name = "USBHUB_RESET", +               .pin = { +                       .gpio = AT91_PIN_PD18, +                       .flags = GPIOF_OUT_INIT_HIGH, +                       .label = "usbhub-reset", +               } +       }, +       { +               .name = "GNSS_INT", +               .pin = { +                       .gpio = AT91_PIN_PD19, +                       .flags = GPIOF_OUT_INIT_HIGH, +                       .label = "gnss-int", +               } +       }, +        // Difference with mtrv1_0_1 starts here +        { +                .name = "RADIO_WM_LK_M",  // WM LINK Monitor for CAT M +                .pin = { +                        .gpio = AT91_PIN_PA14, +                       .flags = GPIOF_IN, +                       .label = "radio-wm-lk-m", +               } +       }, + +       { }, +};  /* radio control (power/reset) for mtr */  static int radio_off_mtr(void) @@ -1323,6 +1584,28 @@ static int radio_reset_mtr(void)  	return 0;  } +static int radio_reset_mtr_mtq(void) +{ +	struct gpio_pin *rst_pin = gpio_pin_by_attr_name("radio-reset"); + +	if (!rst_pin) { +		return -ENODEV; +	} + +	// drive reset pin low for 500ms +	gpio_set_value(rst_pin->pin.gpio, 0); + +	msleep(500); + +	// set pin high +	gpio_set_value(rst_pin->pin.gpio, 1); + +	// wait for 2 sec before toggling on/off pin +	msleep(2000); + +	return 0; +} +  static ssize_t mts_attr_store_radio_power_mtr(struct device *dev,  		struct device_attribute *attr, const char *buf, size_t count)  { @@ -1388,7 +1671,15 @@ static ssize_t mts_attr_store_radio_reset_mtr(struct device *dev,  	mutex_lock(&mts_io_mutex); -	err = radio_reset_mtr(); +	if (mts_hw_version == MTRV1_0_3) +	{ +        err = radio_reset_mtr_mtq(); +	} +	else +	{ +	    err = radio_reset_mtr(); +	} +  	mutex_unlock(&mts_io_mutex); @@ -1643,3 +1934,61 @@ static struct attribute *mtrv1_0_2_platform_attributes[] = {  static struct attribute_group mtrv1_0_2_platform_attribute_group = {  	.attrs = mtrv1_0_2_platform_attributes  }; + + +static struct attribute *mtrv1_0_3_platform_attributes[] = { +       &dev_attr_vendor_id.attr, +       &dev_attr_product_id.attr, +       &dev_attr_device_id.attr, +       &dev_attr_uuid.attr, +       &dev_attr_hw_version.attr, +       &dev_attr_imei.attr, +       &dev_attr_eth_mac.attr, +       &dev_attr_has_radio.attr, +       &dev_attr_wifi_mac_mtr.attr, + +       &dev_attr_reset.attr, +       &dev_attr_reset_monitor.attr, +       &dev_attr_reset_monitor_intervals.attr, +       &dev_attr_radio_reset_mtr.attr, + +       &dev_attr_radio_reset_backoffs.attr, +       &dev_attr_radio_reset_backoff_index.attr, +       &dev_attr_radio_reset_backoff_seconds.attr, + +       &dev_attr_extserial_ri_gpio_mtr.attr, +       &dev_attr_extserial_dtr_mtr.attr, +       &dev_attr_extserial_dsr_gpio_mtr.attr, +       &dev_attr_extserial_dcd_gpio_mtr.attr, + +       &dev_attr_eth_reset_mtr.attr, +       &dev_attr_wifi_bt_lpwkup_mtr.attr, +       &dev_attr_wifi_bt_ulpwkup_mtr.attr, +       &dev_attr_wifi_bt_reset_mtr.attr, +       &dev_attr_wifi_bt_lpmode_mtr.attr, +       &dev_attr_wifi_bt_int_mtr.attr, +       &dev_attr_gnss_reset_mtr.attr, +       &dev_attr_usbhub_reset_mtr.attr, +       &dev_attr_gnss_int_mtr.attr, + +       &dev_attr_led_status.attr, +       &dev_attr_led_cd_gpio.attr, +       &dev_attr_led_sig1_gpio.attr, +       &dev_attr_led_sig2_gpio.attr, +       &dev_attr_led_sig3_gpio.attr, +       &dev_attr_led_wifi_gpio_mtr.attr, + +       &dev_attr_led_b_gpio.attr, +       &dev_attr_led_c_gpio.attr, +       &dev_attr_led_d_gpio.attr, +       &dev_attr_led_e_gpio.attr, +       &dev_attr_led_f_gpio_mtr.attr, + +    &dev_attr_radio_wm_lk_m.attr,  // CAT M feature?  Is this still there on the MTQ with Quectel? + +       NULL, +}; + +static struct attribute_group mtrv1_0_3_platform_attribute_group = { +       .attrs = mtrv1_0_3_platform_attributes +}; diff --git a/io-module/mts-io.c b/io-module/mts-io.c index a17ff3c..0ea7e45 100644 --- a/io-module/mts-io.c +++ b/io-module/mts-io.c @@ -668,7 +668,7 @@ mts_id_eeprom_load(void)                  }  		attr_group = &mtcap_0_0_platform_attribute_group;  		gpio_pins = gpio_pins_mtcap_0_0; -        set_buttons(default_buttons); +                set_buttons(default_buttons);  		if (DEVICE_CAPA(id_eeprom.capa, CAPA_LORA)) {  			attr_group_lora = &mtcap_0_0_lora_attribute_group;  		} @@ -676,33 +676,39 @@ mts_id_eeprom_load(void)  	} else if (strncmp(id_eeprom.hw_version, HW_VERSION_MTR_0_0, strlen(HW_VERSION_MTR_0_0)) == 0) {  		attr_group = &mtr_platform_attribute_group;  		gpio_pins = gpio_pins_mtr_0_0; -        set_buttons(default_buttons); +                set_buttons(default_buttons);  		mts_hw_version = MTR_0_0;  		log_info("detected board %s", HW_VERSION_MTR_0_0);  	} else if (strncmp(id_eeprom.hw_version, HW_VERSION_MTR_0_1, strlen(HW_VERSION_MTR_0_1)) == 0) {  		attr_group = &mtr_platform_attribute_group;  		gpio_pins = gpio_pins_mtr_0_1; -        set_buttons(default_buttons); +                set_buttons(default_buttons);  		mts_hw_version = MTR_0_1;  		log_info("detected board %s", HW_VERSION_MTR_0_1);  	} else if (strncmp(id_eeprom.hw_version, HW_VERSION_MTRV1_0_0, strlen(HW_VERSION_MTRV1_0_0)) == 0) {                  attr_group = &mtr_platform_attribute_group;                  gpio_pins = gpio_pins_mtrv1_0_0; -	set_buttons(default_buttons); +		set_buttons(default_buttons);                  mts_hw_version = MTRV1_0_0;                  log_info("detected board %s", HW_VERSION_MTRV1_0_0);  	} else if (strncmp(id_eeprom.hw_version, HW_VERSION_MTRV1_0_1, strlen(HW_VERSION_MTRV1_0_1)) == 0) {  		attr_group = &mtrv1_0_1_platform_attribute_group;  		gpio_pins = gpio_pins_mtrv1_0_1; -        set_buttons(default_buttons); +	        set_buttons(default_buttons);  		mts_hw_version = MTRV1_0_1;  		log_info("detected board %s", HW_VERSION_MTRV1_0_1);  	} else if (strncmp(id_eeprom.hw_version, HW_VERSION_MTRV1_0_2, strlen(HW_VERSION_MTRV1_0_2)) == 0) {  		attr_group = &mtrv1_0_2_platform_attribute_group;  		gpio_pins = gpio_pins_mtrv1_0_2; -	set_buttons(default_buttons); +		set_buttons(default_buttons);  		mts_hw_version = MTRV1_0_2;  		log_info("detected board %s", HW_VERSION_MTRV1_0_2); +	} else if (strncmp(id_eeprom.hw_version, HW_VERSION_MTRV1_0_3, strlen(HW_VERSION_MTRV1_0_3)) == 0) { +		attr_group = &mtrv1_0_3_platform_attribute_group; +		gpio_pins = gpio_pins_mtrv1_0_3; +		set_buttons(default_buttons); +		mts_hw_version = MTRV1_0_3; +		log_info("detected board %s", HW_VERSION_MTRV1_0_3);  	} else if (strncmp(id_eeprom.hw_version, HW_VERSION_MTHS_0_0, strlen(HW_VERSION_MTHS_0_0)) == 0) {  		attr_group = &mths_0_0_platform_attribute_group;  		gpio_pins = gpio_pins_mths_0_0; diff --git a/io-module/mts_io_module.h b/io-module/mts_io_module.h index 1f2d618..de2b27d 100644 --- a/io-module/mts_io_module.h +++ b/io-module/mts_io_module.h @@ -30,13 +30,14 @@  #define HW_VERSION_MTRV1_0_0			"MTRV1-0.0"  #define HW_VERSION_MTRV1_0_1			"MTRV1-0.1"  #define HW_VERSION_MTRV1_0_2			"MTRV1-0.2"  // Cat M +#define HW_VERSION_MTRV1_0_3                    "MTRV1-0.3"  // MTR-MTQ  #define HW_VERSION_MTCDT_0_0			"MTCDT-0.0"  #define HW_VERSION_MTCDT_0_1			"MTCDT-0.1"  #define HW_VERSION_MTCDTIP_0_0			"MTCDTIP-0.0"  #define HW_VERSION_MTCDTIPHP_0_0		"MTCDTIPHP-0.0"  #define HW_VERSION_MTCAP_0_0			"MTCAP-0.0"  #define HW_VERSION_MTCAP_0_1			"MTCAP-0.1" -#define HW_VERSION_MTHS_0_0				"MTHS-0.0" +#define HW_VERSION_MTHS_0_0			"MTHS-0.0"  enum {  	MTCDP_E1_DK_0_0, @@ -46,10 +47,11 @@ enum {  	MTR_0_1,  	MTRV1_0_0,  	MTRV1_0_1, -    MTRV1_0_2, +	MTRV1_0_2, +	MTRV1_0_3,  	MTCDT_0_0,  	MTCDT_0_1, -    MTCDTIPHP_0_0, +	MTCDTIPHP_0_0,  	MTCAP_0_0,  	MTCAP_0_1,      MTHS_0_0, | 
