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

Pull HSI updates from Sebastian Reichel:

 - use flexible array member for hsi_port in hsi_controller

 - misc small fixes

* tag 'hsi-for-7.1' of git://git.kernel.org/pub/scm/linux/kernel/git/sre/linux-hsi:
  HSI: omap_ssi_port: remove depends on ARM
  HSI: omap_ssi_port: remove set but unused variables
  HSI: cmt_speech: fix wrong printf format
  HSI: omap_ssi_port: remove null check from FAM
  hsi: hsi_core: use kzalloc_flex
This commit is contained in:
Linus Torvalds
2026-04-17 11:32:01 -07:00
5 changed files with 21 additions and 31 deletions

View File

@@ -892,7 +892,7 @@ static void cs_hsi_data_enable(struct cs_hsi_iface *hi,
data_start = L1_CACHE_ALIGN(sizeof(*hi->mmap_cfg));
dev_dbg(&hi->cl->device,
"setting data start at %u, cfg block %u, align %u\n",
"setting data start at %u, cfg block %zu, align %u\n",
data_start, sizeof(*hi->mmap_cfg), L1_CACHE_BYTES);
for (i = 0; i < hi->mmap_cfg->rx_bufs; i++) {

View File

@@ -6,7 +6,7 @@ comment "HSI controllers"
config OMAP_SSI
tristate "OMAP SSI hardware driver"
depends on HSI && OF && ARM && COMMON_CLK
depends on HSI && OF && COMMON_CLK
depends on ARCH_OMAP3 || COMPILE_TEST
help
SSI is a legacy version of HSI. It is usually used to connect

View File

@@ -452,7 +452,6 @@ static int ssi_setup(struct hsi_client *cl)
void __iomem *sst = omap_port->sst_base;
void __iomem *ssr = omap_port->ssr_base;
u32 div;
u32 val;
int err = 0;
pm_runtime_get_sync(omap_port->pdev);
@@ -470,7 +469,7 @@ static int ssi_setup(struct hsi_client *cl)
writel_relaxed(SSI_MODE_SLEEP, sst + SSI_SST_MODE_REG);
writel_relaxed(SSI_MODE_SLEEP, ssr + SSI_SSR_MODE_REG);
/* Flush posted write */
val = readl(ssr + SSI_SSR_MODE_REG);
readl(ssr + SSI_SSR_MODE_REG);
/* TX */
writel_relaxed(31, sst + SSI_SST_FRAMESIZE_REG);
writel_relaxed(div, sst + SSI_SST_DIVISOR_REG);
@@ -1118,7 +1117,7 @@ static int ssi_port_probe(struct platform_device *pd)
dev_dbg(&pd->dev, "init ssi port...\n");
if (!ssi->port || !omap_ssi->port) {
if (!omap_ssi->port) {
dev_err(&pd->dev, "ssi controller not initialized!\n");
err = -ENODEV;
goto error;
@@ -1299,14 +1298,12 @@ static int ssi_restore_port_ctx(struct omap_ssi_port *omap_port)
static int ssi_restore_port_mode(struct omap_ssi_port *omap_port)
{
u32 mode;
writel_relaxed(omap_port->sst.mode,
omap_port->sst_base + SSI_SST_MODE_REG);
writel_relaxed(omap_port->ssr.mode,
omap_port->ssr_base + SSI_SSR_MODE_REG);
/* OCP barrier */
mode = readl(omap_port->ssr_base + SSI_SSR_MODE_REG);
readl(omap_port->ssr_base + SSI_SSR_MODE_REG);
return 0;
}

View File

@@ -342,7 +342,6 @@ static void hsi_controller_release(struct device *dev)
{
struct hsi_controller *hsi = to_hsi_controller(dev);
kfree(hsi->port);
kfree(hsi);
}
@@ -446,7 +445,7 @@ void hsi_put_controller(struct hsi_controller *hsi)
return;
for (i = 0; i < hsi->num_ports; i++)
if (hsi->port && hsi->port[i])
if (hsi->port[i])
put_device(&hsi->port[i]->device);
put_device(&hsi->device);
}
@@ -462,39 +461,33 @@ EXPORT_SYMBOL_GPL(hsi_put_controller);
struct hsi_controller *hsi_alloc_controller(unsigned int n_ports, gfp_t flags)
{
struct hsi_controller *hsi;
struct hsi_port **port;
unsigned int i;
if (!n_ports)
return NULL;
hsi = kzalloc_obj(*hsi, flags);
hsi = kzalloc_flex(*hsi, port, n_ports, flags);
if (!hsi)
return NULL;
port = kzalloc_objs(*port, n_ports, flags);
if (!port) {
kfree(hsi);
return NULL;
}
hsi->num_ports = n_ports;
hsi->port = port;
hsi->device.release = hsi_controller_release;
device_initialize(&hsi->device);
for (i = 0; i < n_ports; i++) {
port[i] = kzalloc_obj(**port, flags);
if (port[i] == NULL)
hsi->port[i] = kzalloc_obj(**hsi->port, flags);
if (hsi->port[i] == NULL)
goto out;
port[i]->num = i;
port[i]->async = hsi_dummy_msg;
port[i]->setup = hsi_dummy_cl;
port[i]->flush = hsi_dummy_cl;
port[i]->start_tx = hsi_dummy_cl;
port[i]->stop_tx = hsi_dummy_cl;
port[i]->release = hsi_dummy_cl;
mutex_init(&port[i]->lock);
BLOCKING_INIT_NOTIFIER_HEAD(&port[i]->n_head);
dev_set_name(&port[i]->device, "port%d", i);
hsi->port[i]->num = i;
hsi->port[i]->async = hsi_dummy_msg;
hsi->port[i]->setup = hsi_dummy_cl;
hsi->port[i]->flush = hsi_dummy_cl;
hsi->port[i]->start_tx = hsi_dummy_cl;
hsi->port[i]->stop_tx = hsi_dummy_cl;
hsi->port[i]->release = hsi_dummy_cl;
mutex_init(&hsi->port[i]->lock);
BLOCKING_INIT_NOTIFIER_HEAD(&hsi->port[i]->n_head);
dev_set_name(&hsi->port[i]->device, "port%d", i);
hsi->port[i]->device.release = hsi_port_release;
device_initialize(&hsi->port[i]->device);
}

View File

@@ -271,7 +271,7 @@ struct hsi_controller {
struct module *owner;
unsigned int id;
unsigned int num_ports;
struct hsi_port **port;
struct hsi_port *port[] __counted_by(num_ports);
};
#define to_hsi_controller(dev) container_of(dev, struct hsi_controller, device)