hc
2024-02-20 102a0743326a03cd1a1202ceda21e175b7d3575c
kernel/drivers/spi/spi-omap-uwire.c
....@@ -424,15 +424,22 @@
424424 static int uwire_setup(struct spi_device *spi)
425425 {
426426 struct uwire_state *ust = spi->controller_state;
427
+ bool initial_setup = false;
428
+ int status;
427429
428430 if (ust == NULL) {
429431 ust = kzalloc(sizeof(*ust), GFP_KERNEL);
430432 if (ust == NULL)
431433 return -ENOMEM;
432434 spi->controller_state = ust;
435
+ initial_setup = true;
433436 }
434437
435
- return uwire_setup_transfer(spi, NULL);
438
+ status = uwire_setup_transfer(spi, NULL);
439
+ if (status && initial_setup)
440
+ kfree(ust);
441
+
442
+ return status;
436443 }
437444
438445 static void uwire_cleanup(struct spi_device *spi)
....@@ -443,7 +450,7 @@
443450 static void uwire_off(struct uwire_spi *uwire)
444451 {
445452 uwire_write_reg(UWIRE_SR3, 0);
446
- clk_disable(uwire->ck);
453
+ clk_disable_unprepare(uwire->ck);
447454 spi_master_put(uwire->bitbang.master);
448455 }
449456
....@@ -475,7 +482,7 @@
475482 spi_master_put(master);
476483 return status;
477484 }
478
- clk_enable(uwire->ck);
485
+ clk_prepare_enable(uwire->ck);
479486
480487 if (cpu_is_omap7xx())
481488 uwire_idx_shift = 1;