From b1744a38515fe073c3e8bdf892c7a64da3652b4c Mon Sep 17 00:00:00 2001 From: Sebastian Reichel Date: Thu, 28 Jan 2016 00:41:37 +0100 Subject: n900: add n950 support The Nokia N950 can use the same driver as the Nokia N900, but the CBS interface is broken and must not be enabled. --- plugins/n900.c | 9 ++++++++- plugins/nokia-gpio.c | 25 ++++++++++++++++++++----- plugins/nokia-gpio.h | 7 +++++++ 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); -- cgit v1.2.3