Commit 3c0b8d1c authored by Linus Torvalds's avatar Linus Torvalds

Merge tag 'hsi-for-4.6' of git://git.kernel.org/pub/scm/linux/kernel/git/sre/linux-hsi

Pull HSI updates from Sebastian Reichel:
 "nokia-modem: add N950 and N9 support"

* tag 'hsi-for-4.6' of git://git.kernel.org/pub/scm/linux/kernel/git/sre/linux-hsi:
  HSI: ssi-protocol: Use handshake logic from n950
  HSI: nokia-modem: add n950 and n9 support
parents 9cc984e4 87d99063
......@@ -7,6 +7,8 @@ properties are needed by the Nokia modem HSI client:
Required properties:
- compatible: Should be one of
"nokia,n900-modem"
"nokia,n950-modem"
"nokia,n9-modem"
- hsi-channel-names: Should contain the following strings
"mcsaab-control"
"speech-control"
......@@ -15,11 +17,11 @@ Required properties:
- gpios: Should provide a GPIO handler for each GPIO listed in
gpio-names
- gpio-names: Should contain the following strings
"cmt_apeslpx"
"cmt_rst_rq"
"cmt_en"
"cmt_rst"
"cmt_bsi"
"cmt_apeslpx" (for n900, n950, n9)
"cmt_rst_rq" (for n900, n950, n9)
"cmt_en" (for n900, n950, n9)
"cmt_rst" (for n900)
"cmt_bsi" (for n900)
- interrupts: Should be IRQ handle for modem's reset indication
Example:
......
......@@ -281,6 +281,8 @@ static int nokia_modem_remove(struct device *dev)
#ifdef CONFIG_OF
static const struct of_device_id nokia_modem_of_match[] = {
{ .compatible = "nokia,n900-modem", },
{ .compatible = "nokia,n950-modem", },
{ .compatible = "nokia,n9-modem", },
{},
};
MODULE_DEVICE_TABLE(of, nokia_modem_of_match);
......
......@@ -521,13 +521,7 @@ static void ssip_start_rx(struct hsi_client *cl)
* high transition. Therefore we need to ignore the sencond UP event.
*/
if ((ssi->main_state != ACTIVE) || (ssi->recv_state == RECV_READY)) {
if (ssi->main_state == INIT) {
ssi->main_state = HANDSHAKE;
spin_unlock(&ssi->lock);
ssip_send_bootinfo_req_cmd(cl);
} else {
spin_unlock(&ssi->lock);
}
spin_unlock(&ssi->lock);
return;
}
ssip_set_rxstate(ssi, RECV_READY);
......@@ -671,6 +665,7 @@ static void ssip_rx_bootinforeq(struct hsi_client *cl, u32 cmd)
ssip_error(cl);
/* Fall through */
case INIT:
case HANDSHAKE:
spin_lock(&ssi->lock);
ssi->main_state = HANDSHAKE;
if (!ssi->waketest) {
......@@ -688,9 +683,6 @@ static void ssip_rx_bootinforeq(struct hsi_client *cl, u32 cmd)
msg->complete = ssip_release_cmd;
hsi_async_write(cl, msg);
break;
case HANDSHAKE:
/* Ignore */
break;
default:
dev_dbg(&cl->device, "Wrong state M(%d)\n", ssi->main_state);
break;
......@@ -939,9 +931,11 @@ static int ssip_pn_open(struct net_device *dev)
ssi->waketest = 1;
ssi_waketest(cl, 1); /* FIXME: To be removed */
}
ssi->main_state = INIT;
ssi->main_state = HANDSHAKE;
spin_unlock_bh(&ssi->lock);
ssip_send_bootinfo_req_cmd(cl);
return 0;
}
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment