Commit 6c4ba00c authored by Linus Torvalds's avatar Linus Torvalds

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

Pull HSI updates from Sebastian Reichel:

 - add HSI OMAP4 bindings

 - misc small fixes

* tag 'hsi-for-4.15' of git://git.kernel.org/pub/scm/linux/kernel/git/sre/linux-hsi:
  dt-bindings: hsi: add omap4 hsi controller bindings
  HSI: hsi_char: pr_err() strings should end with newlines
  HSI: omap_ssi_core: fix kilo to be "k" not "K"
parents 8c38fb5c 8635d6b3
OMAP SSI controller bindings OMAP SSI controller bindings
OMAP Synchronous Serial Interface (SSI) controller implements a legacy OMAP3's Synchronous Serial Interface (SSI) controller implements a
variant of MIPI's High Speed Synchronous Serial Interface (HSI). legacy variant of MIPI's High Speed Synchronous Serial Interface (HSI),
while the controller found inside OMAP4 is supposed to be fully compliant
with the HSI standard.
Required properties: Required properties:
- compatible: Should include "ti,omap3-ssi". - compatible: Should include "ti,omap3-ssi" or "ti,omap4-hsi"
- reg-names: Contains the values "sys" and "gdd" (in this order). - reg-names: Contains the values "sys" and "gdd" (in this order).
- reg: Contains a matching register specifier for each entry - reg: Contains a matching register specifier for each entry
in reg-names. in reg-names.
...@@ -27,6 +29,7 @@ Each port is represented as a sub-node of the ti,omap3-ssi device. ...@@ -27,6 +29,7 @@ Each port is represented as a sub-node of the ti,omap3-ssi device.
Required Port sub-node properties: Required Port sub-node properties:
- compatible: Should be set to the following value - compatible: Should be set to the following value
ti,omap3-ssi-port (applicable to OMAP34xx devices) ti,omap3-ssi-port (applicable to OMAP34xx devices)
ti,omap4-hsi-port (applicable to OMAP44xx devices)
- reg-names: Contains the values "tx" and "rx" (in this order). - reg-names: Contains the values "tx" and "rx" (in this order).
- reg: Contains a matching register specifier for each entry - reg: Contains a matching register specifier for each entry
in reg-names. in reg-names.
...@@ -38,6 +41,10 @@ Required Port sub-node properties: ...@@ -38,6 +41,10 @@ Required Port sub-node properties:
property. If it's missing the port will not be property. If it's missing the port will not be
enabled. enabled.
Optional properties:
- ti,hwmods: Shall contain TI interconnect module name if needed
by the SoC
Example for Nokia N900: Example for Nokia N900:
ssi-controller@48058000 { ssi-controller@48058000 {
......
...@@ -773,13 +773,13 @@ static int __init hsc_init(void) ...@@ -773,13 +773,13 @@ static int __init hsc_init(void)
if ((max_data_size < 4) || (max_data_size > 0x10000) || if ((max_data_size < 4) || (max_data_size > 0x10000) ||
(max_data_size & (max_data_size - 1))) { (max_data_size & (max_data_size - 1))) {
pr_err("Invalid max read/write data size"); pr_err("Invalid max read/write data size\n");
return -EINVAL; return -EINVAL;
} }
ret = hsi_register_client_driver(&hsc_driver); ret = hsi_register_client_driver(&hsc_driver);
if (ret) { if (ret) {
pr_err("Error while registering HSI/SSI driver %d", ret); pr_err("Error while registering HSI/SSI driver %d\n", ret);
return ret; return ret;
} }
......
...@@ -334,7 +334,7 @@ static int ssi_clk_event(struct notifier_block *nb, unsigned long event, ...@@ -334,7 +334,7 @@ static int ssi_clk_event(struct notifier_block *nb, unsigned long event,
case POST_RATE_CHANGE: case POST_RATE_CHANGE:
dev_dbg(&ssi->device, "post rate change (%lu -> %lu)\n", dev_dbg(&ssi->device, "post rate change (%lu -> %lu)\n",
clk_data->old_rate, clk_data->new_rate); clk_data->old_rate, clk_data->new_rate);
omap_ssi->fck_rate = DIV_ROUND_CLOSEST(clk_data->new_rate, 1000); /* KHz */ omap_ssi->fck_rate = DIV_ROUND_CLOSEST(clk_data->new_rate, 1000); /* kHz */
for (i = 0; i < ssi->num_ports; i++) { for (i = 0; i < ssi->num_ports; i++) {
omap_port = omap_ssi->port[i]; omap_port = omap_ssi->port[i];
...@@ -467,9 +467,9 @@ static int ssi_hw_init(struct hsi_controller *ssi) ...@@ -467,9 +467,9 @@ static int ssi_hw_init(struct hsi_controller *ssi)
} }
/* Resetting GDD */ /* Resetting GDD */
writel_relaxed(SSI_SWRESET, omap_ssi->gdd + SSI_GDD_GRST_REG); writel_relaxed(SSI_SWRESET, omap_ssi->gdd + SSI_GDD_GRST_REG);
/* Get FCK rate in KHz */ /* Get FCK rate in kHz */
omap_ssi->fck_rate = DIV_ROUND_CLOSEST(ssi_get_clk_rate(ssi), 1000); omap_ssi->fck_rate = DIV_ROUND_CLOSEST(ssi_get_clk_rate(ssi), 1000);
dev_dbg(&ssi->device, "SSI fck rate %lu KHz\n", omap_ssi->fck_rate); dev_dbg(&ssi->device, "SSI fck rate %lu kHz\n", omap_ssi->fck_rate);
writel_relaxed(SSI_CLK_AUTOGATING_ON, omap_ssi->sys + SSI_GDD_GCR_REG); writel_relaxed(SSI_CLK_AUTOGATING_ON, omap_ssi->sys + SSI_GDD_GCR_REG);
omap_ssi->gdd_gcr = SSI_CLK_AUTOGATING_ON; omap_ssi->gdd_gcr = SSI_CLK_AUTOGATING_ON;
......
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