diff options
author | Mike Fiore <mfiore@multitech.com> | 2014-10-09 07:38:20 -0500 |
---|---|---|
committer | Mike Fiore <mfiore@multitech.com> | 2014-10-09 07:38:20 -0500 |
commit | af9b6ed9b53e34ff170645a114f95e82cbfe0101 (patch) | |
tree | 591634acb576d39b888d2131de84c6002a11e774 /io-module/telit_radio.c | |
parent | da1090a73f312b14db0d7a93a9c9373fffd34958 (diff) | |
parent | 44f859e243f646f3d2bd9540027816e3b4981ab9 (diff) | |
download | mts-io-af9b6ed9b53e34ff170645a114f95e82cbfe0101.tar.gz mts-io-af9b6ed9b53e34ff170645a114f95e82cbfe0101.tar.bz2 mts-io-af9b6ed9b53e34ff170645a114f95e82cbfe0101.zip |
Merge branch 'mtr2d2' into 'master'
Conflicts:
io-module/mtdc_gpiob.c - remove, replaced by mtac_gpiob.c
io-module/mtr2.c - remove, dropping support for this HW
io-module/mts_io.c - keep changes from mtr2d2 branch
io-module/spi.c - remove, no longer needed
Diffstat (limited to 'io-module/telit_radio.c')
-rw-r--r-- | io-module/telit_radio.c | 219 |
1 files changed, 0 insertions, 219 deletions
diff --git a/io-module/telit_radio.c b/io-module/telit_radio.c deleted file mode 100644 index fbac4fa..0000000 --- a/io-module/telit_radio.c +++ /dev/null @@ -1,219 +0,0 @@ - -static int radio_off_telit(void) -{ - int value, ret; - struct gpio_pin *pwrmon_pin = gpio_pin_by_name("PWRMON"); - struct gpio_pin *onoff_pin = gpio_pin_by_name("3G_ONOFF"); - struct gpio_pin *rst_pin = gpio_pin_by_name("3G_RST"); - - if (!onoff_pin || !pwrmon_pin || !rst_pin) { - return -ENODEV; - } - - value = gpio_get_value(pwrmon_pin->pin.gpio); - if(value == 0) { - log_error("radio is already off"); - return -EINVAL; - } - - // drive on/off pin low for at least 3 sec - log_info("shutting down radio"); - ret = gpio_direction_output_pullup(onoff_pin->pin.gpio, 0, onoff_pin->pin.flags & GPIOF_PULLUP); - if (ret) { - return ret; - } - - msleep(3500); - - // set on/off pin high - ret = gpio_direction_output_pullup(onoff_pin->pin.gpio, 1, onoff_pin->pin.flags & GPIOF_PULLUP); - if (ret) { - return ret; - } - - // wait for radio to power off - msleep(5000); - - // check that power is low - value = gpio_get_value(pwrmon_pin->pin.gpio); - if(value != 0) { - log_warning("radio is still on. performing radio reset."); - //Perform Hard Reset - ret = gpio_direction_output_pullup(rst_pin->pin.gpio, 0, rst_pin->pin.flags & GPIOF_PULLUP); - if (ret) { - return ret; - } - - msleep(500); - - // set pin high - ret = gpio_direction_output_pullup(rst_pin->pin.gpio, 1, rst_pin->pin.flags & GPIOF_PULLUP); - if (ret) { - return ret; - } - } else { - log_info("radio has been shut down"); - } - - return ret; -} - -static int radio_on_telit(void) -{ - int value, ret; - struct gpio_pin *pwrmon_pin = gpio_pin_by_name("PWRMON"); - struct gpio_pin *onoff_pin = gpio_pin_by_name("3G_ONOFF"); - struct gpio_pin *rst_pin = gpio_pin_by_name("3G_RST"); - - if (!onoff_pin || !pwrmon_pin || !rst_pin) { - return -ENODEV; - } - - value = gpio_get_value(pwrmon_pin->pin.gpio); - if(value != 0) { - log_error("radio is already on"); - return -EINVAL; - } - - // drive on/off pin low for at least 5 sec - log_info("turning on radio"); - ret = gpio_direction_output_pullup(onoff_pin->pin.gpio, 0, onoff_pin->pin.flags & GPIOF_PULLUP); - if (ret) { - return ret; - } - - msleep(5500); - - // set on/off pin high - ret = gpio_direction_output_pullup(onoff_pin->pin.gpio, 1, onoff_pin->pin.flags & GPIOF_PULLUP); - if (ret) { - return ret; - } - - msleep(200); - - // check that power is high - value = gpio_get_value(pwrmon_pin->pin.gpio); - if(value == 0) { - log_warning("radio is still off. performing radio reset"); - //Perform Hard Reset - ret = gpio_direction_output_pullup(rst_pin->pin.gpio, 0, rst_pin->pin.flags & GPIOF_PULLUP); - if (ret) { - return ret; - } - - msleep(500); - - // set pin high - ret = gpio_direction_output_pullup(rst_pin->pin.gpio, 1, rst_pin->pin.flags & GPIOF_PULLUP); - if (ret) { - return ret; - } - } else { - log_info("radio has been turned on"); - } - - return ret; -} - -static ssize_t mts_attr_store_radio_power_telit(struct device *dev, - struct device_attribute *attr, const char *buf, size_t count) -{ - int value; - int err; - - if (sscanf(buf, "%i", &value) != 1) { - return -EINVAL; - } - if (value == 0) { - mutex_lock(&mts_io_mutex); - err = radio_off_telit(); - mutex_unlock(&mts_io_mutex); - } else { - mutex_lock(&mts_io_mutex); - err = radio_on_telit(); - mutex_unlock(&mts_io_mutex); - } - - if (err) { - return err; - } - - return count; -} - -static int radio_reset_telit(void) -{ - int ret; - struct gpio_pin *rst_pin = gpio_pin_by_name("3G_RST"); - struct gpio_pin *onoff_pin = gpio_pin_by_name("3G_ONOFF"); - - if (!rst_pin || !onoff_pin) { - return -ENODEV; - } - - // drive reset pin low for 500ms - ret = gpio_direction_output_pullup(rst_pin->pin.gpio, 0, rst_pin->pin.flags & GPIOF_PULLUP); - if (ret) { - return ret; - } - - msleep(500); - - // set pin high - ret = gpio_direction_output_pullup(rst_pin->pin.gpio, 1, rst_pin->pin.flags & GPIOF_PULLUP); - if (ret) { - return ret; - } - - // wait for 2 sec before toggling on/off pin - msleep(2000); - - // drive on/off pin low for 6 sec - ret = gpio_direction_output_pullup(onoff_pin->pin.gpio, 0, onoff_pin->pin.flags & GPIOF_PULLUP); - if (ret) { - return ret; - } - - msleep(6000); - - // set on/off pin high - ret = gpio_direction_output_pullup(onoff_pin->pin.gpio, 1, onoff_pin->pin.flags & GPIOF_PULLUP); - if (ret) { - return ret; - } - - return ret; -} - -static ssize_t mts_attr_store_radio_reset_telit(struct device *dev, - struct device_attribute *attr, const char *buf, size_t count) -{ - int value; - int err; - - if (sscanf(buf, "%i", &value) != 1) { - return -EINVAL; - } - if (value != 0) { - return -EINVAL; - } - - mutex_lock(&mts_io_mutex); - - err = radio_reset_telit(); - - mutex_unlock(&mts_io_mutex); - - if (err) { - return err; - } - - return count; -} - -static DEVICE_ATTR_MTS(dev_attr_radio_power_telit, "radio-power", - mts_attr_show_gpio_pin, mts_attr_store_radio_power_telit); - -static DEVICE_ATTR_MTS(dev_attr_radio_reset_telit, "radio-reset", - mts_attr_show_gpio_pin, mts_attr_store_radio_reset_telit); |