Przeglądaj źródła

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
Linus Torvalds 9 lat temu
rodzic
commit
3c0b8d1c5f

+ 7 - 5
Documentation/devicetree/bindings/hsi/nokia-modem.txt

@@ -7,6 +7,8 @@ properties are needed by the Nokia modem HSI client:
 Required properties:
 Required properties:
 - compatible:		Should be one of
 - compatible:		Should be one of
       "nokia,n900-modem"
       "nokia,n900-modem"
+      "nokia,n950-modem"
+      "nokia,n9-modem"
 - hsi-channel-names:	Should contain the following strings
 - hsi-channel-names:	Should contain the following strings
       "mcsaab-control"
       "mcsaab-control"
       "speech-control"
       "speech-control"
@@ -15,11 +17,11 @@ Required properties:
 - gpios:		Should provide a GPIO handler for each GPIO listed in
 - gpios:		Should provide a GPIO handler for each GPIO listed in
                         gpio-names
                         gpio-names
 - gpio-names:		Should contain the following strings
 - 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
 - interrupts:		Should be IRQ handle for modem's reset indication
 
 
 Example:
 Example:

+ 2 - 0
drivers/hsi/clients/nokia-modem.c

@@ -281,6 +281,8 @@ static int nokia_modem_remove(struct device *dev)
 #ifdef CONFIG_OF
 #ifdef CONFIG_OF
 static const struct of_device_id nokia_modem_of_match[] = {
 static const struct of_device_id nokia_modem_of_match[] = {
 	{ .compatible = "nokia,n900-modem", },
 	{ .compatible = "nokia,n900-modem", },
+	{ .compatible = "nokia,n950-modem", },
+	{ .compatible = "nokia,n9-modem", },
 	{},
 	{},
 };
 };
 MODULE_DEVICE_TABLE(of, nokia_modem_of_match);
 MODULE_DEVICE_TABLE(of, nokia_modem_of_match);

+ 5 - 11
drivers/hsi/clients/ssi_protocol.c

@@ -521,13 +521,7 @@ static void ssip_start_rx(struct hsi_client *cl)
 	 * high transition. Therefore we need to ignore the sencond UP event.
 	 * 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 != 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;
 		return;
 	}
 	}
 	ssip_set_rxstate(ssi, RECV_READY);
 	ssip_set_rxstate(ssi, RECV_READY);
@@ -671,6 +665,7 @@ static void ssip_rx_bootinforeq(struct hsi_client *cl, u32 cmd)
 		ssip_error(cl);
 		ssip_error(cl);
 		/* Fall through */
 		/* Fall through */
 	case INIT:
 	case INIT:
+	case HANDSHAKE:
 		spin_lock(&ssi->lock);
 		spin_lock(&ssi->lock);
 		ssi->main_state = HANDSHAKE;
 		ssi->main_state = HANDSHAKE;
 		if (!ssi->waketest) {
 		if (!ssi->waketest) {
@@ -688,9 +683,6 @@ static void ssip_rx_bootinforeq(struct hsi_client *cl, u32 cmd)
 		msg->complete = ssip_release_cmd;
 		msg->complete = ssip_release_cmd;
 		hsi_async_write(cl, msg);
 		hsi_async_write(cl, msg);
 		break;
 		break;
-	case HANDSHAKE:
-		/* Ignore */
-		break;
 	default:
 	default:
 		dev_dbg(&cl->device, "Wrong state M(%d)\n", ssi->main_state);
 		dev_dbg(&cl->device, "Wrong state M(%d)\n", ssi->main_state);
 		break;
 		break;
@@ -939,9 +931,11 @@ static int ssip_pn_open(struct net_device *dev)
 		ssi->waketest = 1;
 		ssi->waketest = 1;
 		ssi_waketest(cl, 1); /* FIXME: To be removed */
 		ssi_waketest(cl, 1); /* FIXME: To be removed */
 	}
 	}
-	ssi->main_state = INIT;
+	ssi->main_state = HANDSHAKE;
 	spin_unlock_bh(&ssi->lock);
 	spin_unlock_bh(&ssi->lock);
 
 
+	ssip_send_bootinfo_req_cmd(cl);
+
 	return 0;
 	return 0;
 }
 }