summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--plugins/n900.c9
-rw-r--r--plugins/nokia-gpio.c25
-rw-r--r--plugins/nokia-gpio.h7
3 files changed, 35 insertions, 6 deletions
diff --git a/plugins/n900.c b/plugins/n900.c
index 0f2cb2cd..956a6fca 100644
--- a/plugins/n900.c
+++ b/plugins/n900.c
@@ -74,6 +74,7 @@ struct isi_data {
int mtc_state;
guint timeout;
struct isi_cb_data *online_cbd;
+ enum rapu_type rapu_version;
};
static void mtc_power_off(struct isi_data *isi);
@@ -377,6 +378,9 @@ static int n900_probe(struct ofono_modem *modem)
isi->ifname = ifname;
isi->client = client;
+ isi->rapu_version = gpio_rapuyama_version(modem);
+ DBG("RAPUYAMA version: %d", isi->rapu_version);
+
ofono_modem_set_data(modem, isi);
return 0;
@@ -507,7 +511,10 @@ static void n900_post_online(struct ofono_modem *modem)
ofono_netreg_create(modem, 0, "isimodem", isi->modem);
ofono_sms_create(modem, 0, "isimodem", isi->modem);
- ofono_cbs_create(modem, 0, "isimodem", isi->modem);
+ if (isi->rapu_version == RAPU_TYPE_1) {
+ /* requesting CBS crashes RAPUYAMA v2 modems */
+ ofono_cbs_create(modem, 0, "isimodem", isi->modem);
+ }
ofono_ussd_create(modem, 0, "isimodem", isi->modem);
ofono_call_settings_create(modem, 0, "isimodem", isi->modem);
ofono_call_barring_create(modem, 0, "isimodem", isi->modem);
diff --git a/plugins/nokia-gpio.c b/plugins/nokia-gpio.c
index 57aad8d0..f4c7895c 100644
--- a/plugins/nokia-gpio.c
+++ b/plugins/nokia-gpio.c
@@ -44,11 +44,6 @@
#define GPIO_SWITCH "/sys/devices/platform/gpio-switch"
#define DEV_CMT "/dev/cmt"
-enum rapu_type {
- RAPU_TYPE_1,
- RAPU_TYPE_2,
-};
-
enum retry_count {
RETRY_COUNT_RESET = 5,
RETRY_COUNT_POWER_ON = 10,
@@ -236,6 +231,10 @@ static void gpio_start_modem_power_on(void)
GPIO_WRITE(cmt_en, 1); /* Press "power key" */
GPIO_WRITE(cmt_rst, 1); /* Release CMT to boot */
break;
+
+ default:
+ ofono_error("unsupported modem type");
+ break;
}
GPIO_WRITE(cmt_rst_rq, 1);
@@ -257,6 +256,10 @@ static void gpio_finish_modem_power_on(void)
case RAPU_TYPE_1:
GPIO_WRITE(cmt_en, 0); /* release "power key" */
break;
+
+ default:
+ ofono_error("unsupported modem type");
+ break;
}
}
@@ -311,6 +314,10 @@ static void gpio_finish_modem_power_off(void)
GPIO_WRITE(cmt_rst, 1); /* release modem to be powered
off by bootloader */
break;
+
+ default:
+ ofono_error("unsupported modem type");
+ break;
}
}
@@ -818,3 +825,11 @@ int gpio_disable(void *data)
return -EINPROGRESS;
}
+
+int gpio_rapuyama_version(void *data)
+{
+ if (self.data != data)
+ return -EINVAL;
+
+ return self.rapu;
+}
diff --git a/plugins/nokia-gpio.h b/plugins/nokia-gpio.h
index b653bb8c..5d927194 100644
--- a/plugins/nokia-gpio.h
+++ b/plugins/nokia-gpio.h
@@ -19,6 +19,12 @@
*
*/
+enum rapu_type {
+ UNKNOWN,
+ RAPU_TYPE_1,
+ RAPU_TYPE_2,
+};
+
enum power_state {
POWER_STATE_NONE,
POWER_STATE_ON_STARTED,
@@ -36,5 +42,6 @@ int gpio_probe(GIsiModem *idx, unsigned addr, gpio_finished_cb_t cb, void *data)
int gpio_enable(void *opaque);
int gpio_disable(void *opaque);
int gpio_remove(void *opaque);
+int gpio_rapuyama_version(void *data);
char const *gpio_power_state_name(enum power_state value);