Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 3c0b8d1c authored by Linus Torvalds's avatar Linus Torvalds
Browse files
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
Loading
Loading
Loading
Loading
+7 −5
Original line number Diff line number Diff line
@@ -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:
+2 −0
Original line number Diff line number Diff line
@@ -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);
+5 −11
Original line number Diff line number Diff line
@@ -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);
		}
		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;
}