mirror of
https://github.com/torvalds/linux.git
synced 2026-04-18 06:44:00 -04:00
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:
@@ -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++) {
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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;
|
||||
}
|
||||
|
||||
@@ -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);
|
||||
}
|
||||
|
||||
@@ -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)
|
||||
|
||||
Reference in New Issue
Block a user