Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux
1
fork

Configure Feed

Select the types of activity you want to include in your feed.

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

+21 -31
+1 -1
drivers/hsi/clients/cmt_speech.c
··· 892 892 893 893 data_start = L1_CACHE_ALIGN(sizeof(*hi->mmap_cfg)); 894 894 dev_dbg(&hi->cl->device, 895 - "setting data start at %u, cfg block %u, align %u\n", 895 + "setting data start at %u, cfg block %zu, align %u\n", 896 896 data_start, sizeof(*hi->mmap_cfg), L1_CACHE_BYTES); 897 897 898 898 for (i = 0; i < hi->mmap_cfg->rx_bufs; i++) {
+1 -1
drivers/hsi/controllers/Kconfig
··· 6 6 7 7 config OMAP_SSI 8 8 tristate "OMAP SSI hardware driver" 9 - depends on HSI && OF && ARM && COMMON_CLK 9 + depends on HSI && OF && COMMON_CLK 10 10 depends on ARCH_OMAP3 || COMPILE_TEST 11 11 help 12 12 SSI is a legacy version of HSI. It is usually used to connect
+3 -6
drivers/hsi/controllers/omap_ssi_port.c
··· 452 452 void __iomem *sst = omap_port->sst_base; 453 453 void __iomem *ssr = omap_port->ssr_base; 454 454 u32 div; 455 - u32 val; 456 455 int err = 0; 457 456 458 457 pm_runtime_get_sync(omap_port->pdev); ··· 469 470 writel_relaxed(SSI_MODE_SLEEP, sst + SSI_SST_MODE_REG); 470 471 writel_relaxed(SSI_MODE_SLEEP, ssr + SSI_SSR_MODE_REG); 471 472 /* Flush posted write */ 472 - val = readl(ssr + SSI_SSR_MODE_REG); 473 + readl(ssr + SSI_SSR_MODE_REG); 473 474 /* TX */ 474 475 writel_relaxed(31, sst + SSI_SST_FRAMESIZE_REG); 475 476 writel_relaxed(div, sst + SSI_SST_DIVISOR_REG); ··· 1117 1118 1118 1119 dev_dbg(&pd->dev, "init ssi port...\n"); 1119 1120 1120 - if (!ssi->port || !omap_ssi->port) { 1121 + if (!omap_ssi->port) { 1121 1122 dev_err(&pd->dev, "ssi controller not initialized!\n"); 1122 1123 err = -ENODEV; 1123 1124 goto error; ··· 1298 1299 1299 1300 static int ssi_restore_port_mode(struct omap_ssi_port *omap_port) 1300 1301 { 1301 - u32 mode; 1302 - 1303 1302 writel_relaxed(omap_port->sst.mode, 1304 1303 omap_port->sst_base + SSI_SST_MODE_REG); 1305 1304 writel_relaxed(omap_port->ssr.mode, 1306 1305 omap_port->ssr_base + SSI_SSR_MODE_REG); 1307 1306 /* OCP barrier */ 1308 - mode = readl(omap_port->ssr_base + SSI_SSR_MODE_REG); 1307 + readl(omap_port->ssr_base + SSI_SSR_MODE_REG); 1309 1308 1310 1309 return 0; 1311 1310 }
+15 -22
drivers/hsi/hsi_core.c
··· 342 342 { 343 343 struct hsi_controller *hsi = to_hsi_controller(dev); 344 344 345 - kfree(hsi->port); 346 345 kfree(hsi); 347 346 } 348 347 ··· 445 446 return; 446 447 447 448 for (i = 0; i < hsi->num_ports; i++) 448 - if (hsi->port && hsi->port[i]) 449 + if (hsi->port[i]) 449 450 put_device(&hsi->port[i]->device); 450 451 put_device(&hsi->device); 451 452 } ··· 461 462 struct hsi_controller *hsi_alloc_controller(unsigned int n_ports, gfp_t flags) 462 463 { 463 464 struct hsi_controller *hsi; 464 - struct hsi_port **port; 465 465 unsigned int i; 466 466 467 467 if (!n_ports) 468 468 return NULL; 469 469 470 - hsi = kzalloc_obj(*hsi, flags); 470 + hsi = kzalloc_flex(*hsi, port, n_ports, flags); 471 471 if (!hsi) 472 472 return NULL; 473 - port = kzalloc_objs(*port, n_ports, flags); 474 - if (!port) { 475 - kfree(hsi); 476 - return NULL; 477 - } 473 + 478 474 hsi->num_ports = n_ports; 479 - hsi->port = port; 480 475 hsi->device.release = hsi_controller_release; 481 476 device_initialize(&hsi->device); 482 477 483 478 for (i = 0; i < n_ports; i++) { 484 - port[i] = kzalloc_obj(**port, flags); 485 - if (port[i] == NULL) 479 + hsi->port[i] = kzalloc_obj(**hsi->port, flags); 480 + if (hsi->port[i] == NULL) 486 481 goto out; 487 - port[i]->num = i; 488 - port[i]->async = hsi_dummy_msg; 489 - port[i]->setup = hsi_dummy_cl; 490 - port[i]->flush = hsi_dummy_cl; 491 - port[i]->start_tx = hsi_dummy_cl; 492 - port[i]->stop_tx = hsi_dummy_cl; 493 - port[i]->release = hsi_dummy_cl; 494 - mutex_init(&port[i]->lock); 495 - BLOCKING_INIT_NOTIFIER_HEAD(&port[i]->n_head); 496 - dev_set_name(&port[i]->device, "port%d", i); 482 + hsi->port[i]->num = i; 483 + hsi->port[i]->async = hsi_dummy_msg; 484 + hsi->port[i]->setup = hsi_dummy_cl; 485 + hsi->port[i]->flush = hsi_dummy_cl; 486 + hsi->port[i]->start_tx = hsi_dummy_cl; 487 + hsi->port[i]->stop_tx = hsi_dummy_cl; 488 + hsi->port[i]->release = hsi_dummy_cl; 489 + mutex_init(&hsi->port[i]->lock); 490 + BLOCKING_INIT_NOTIFIER_HEAD(&hsi->port[i]->n_head); 491 + dev_set_name(&hsi->port[i]->device, "port%d", i); 497 492 hsi->port[i]->device.release = hsi_port_release; 498 493 device_initialize(&hsi->port[i]->device); 499 494 }
+1 -1
include/linux/hsi/hsi.h
··· 271 271 struct module *owner; 272 272 unsigned int id; 273 273 unsigned int num_ports; 274 - struct hsi_port **port; 274 + struct hsi_port *port[] __counted_by(num_ports); 275 275 }; 276 276 277 277 #define to_hsi_controller(dev) container_of(dev, struct hsi_controller, device)