|
@@ -46,6 +46,7 @@ struct nokia_modem_device {
|
|
|
struct nokia_modem_gpio *gpios;
|
|
|
int gpio_amount;
|
|
|
struct hsi_client *ssi_protocol;
|
|
|
+ struct hsi_client *cmt_speech;
|
|
|
};
|
|
|
|
|
|
static void do_nokia_modem_rst_ind_tasklet(unsigned long data)
|
|
@@ -149,6 +150,7 @@ static int nokia_modem_probe(struct device *dev)
|
|
|
struct hsi_port *port = hsi_get_port(cl);
|
|
|
int irq, pflags, err;
|
|
|
struct hsi_board_info ssip;
|
|
|
+ struct hsi_board_info cmtspeech;
|
|
|
|
|
|
np = dev->of_node;
|
|
|
if (!np) {
|
|
@@ -214,12 +216,35 @@ static int nokia_modem_probe(struct device *dev)
|
|
|
goto error3;
|
|
|
}
|
|
|
|
|
|
- /* TODO: register cmt-speech hsi client */
|
|
|
+ cmtspeech.name = "cmt-speech";
|
|
|
+ cmtspeech.tx_cfg = cl->tx_cfg;
|
|
|
+ cmtspeech.rx_cfg = cl->rx_cfg;
|
|
|
+ cmtspeech.platform_data = NULL;
|
|
|
+ cmtspeech.archdata = NULL;
|
|
|
+
|
|
|
+ modem->cmt_speech = hsi_new_client(port, &cmtspeech);
|
|
|
+ if (!modem->cmt_speech) {
|
|
|
+ dev_err(dev, "Could not register cmt-speech device\n");
|
|
|
+ err = -ENOMEM;
|
|
|
+ goto error3;
|
|
|
+ }
|
|
|
+
|
|
|
+ err = device_attach(&modem->cmt_speech->device);
|
|
|
+ if (err == 0) {
|
|
|
+ dev_err(dev, "Missing cmt-speech driver\n");
|
|
|
+ err = -EPROBE_DEFER;
|
|
|
+ goto error4;
|
|
|
+ } else if (err < 0) {
|
|
|
+ dev_err(dev, "Could not load cmt-speech driver (%d)\n", err);
|
|
|
+ goto error4;
|
|
|
+ }
|
|
|
|
|
|
dev_info(dev, "Registered Nokia HSI modem\n");
|
|
|
|
|
|
return 0;
|
|
|
|
|
|
+error4:
|
|
|
+ hsi_remove_client(&modem->cmt_speech->device, NULL);
|
|
|
error3:
|
|
|
hsi_remove_client(&modem->ssi_protocol->device, NULL);
|
|
|
error2:
|
|
@@ -238,6 +263,11 @@ static int nokia_modem_remove(struct device *dev)
|
|
|
if (!modem)
|
|
|
return 0;
|
|
|
|
|
|
+ if (modem->cmt_speech) {
|
|
|
+ hsi_remove_client(&modem->cmt_speech->device, NULL);
|
|
|
+ modem->cmt_speech = NULL;
|
|
|
+ }
|
|
|
+
|
|
|
if (modem->ssi_protocol) {
|
|
|
hsi_remove_client(&modem->ssi_protocol->device, NULL);
|
|
|
modem->ssi_protocol = NULL;
|