| .. | .. |
|---|
| 20 | 20 | #include <linux/spi/spi.h> |
|---|
| 21 | 21 | #include <linux/mutex.h> |
|---|
| 22 | 22 | #include <linux/of.h> |
|---|
| 23 | +#include <linux/reset.h> |
|---|
| 23 | 24 | |
|---|
| 24 | 25 | #define HSSPI_GLOBAL_CTRL_REG 0x0 |
|---|
| 25 | 26 | #define GLOBAL_CTRL_CS_POLARITY_SHIFT 0 |
|---|
| .. | .. |
|---|
| 291 | 292 | |
|---|
| 292 | 293 | msg->actual_length += t->len; |
|---|
| 293 | 294 | |
|---|
| 294 | | - if (t->delay_usecs) |
|---|
| 295 | | - udelay(t->delay_usecs); |
|---|
| 295 | + spi_transfer_delay_exec(t); |
|---|
| 296 | 296 | |
|---|
| 297 | 297 | if (t->cs_change) |
|---|
| 298 | 298 | bcm63xx_hsspi_set_cs(bs, spi->chip_select, false); |
|---|
| .. | .. |
|---|
| 330 | 330 | { |
|---|
| 331 | 331 | struct spi_master *master; |
|---|
| 332 | 332 | struct bcm63xx_hsspi *bs; |
|---|
| 333 | | - struct resource *res_mem; |
|---|
| 334 | 333 | void __iomem *regs; |
|---|
| 335 | 334 | struct device *dev = &pdev->dev; |
|---|
| 336 | 335 | struct clk *clk, *pll_clk = NULL; |
|---|
| 337 | 336 | int irq, ret; |
|---|
| 338 | 337 | u32 reg, rate, num_cs = HSSPI_SPI_MAX_CS; |
|---|
| 338 | + struct reset_control *reset; |
|---|
| 339 | 339 | |
|---|
| 340 | 340 | irq = platform_get_irq(pdev, 0); |
|---|
| 341 | | - if (irq < 0) { |
|---|
| 342 | | - dev_err(dev, "no irq: %d\n", irq); |
|---|
| 341 | + if (irq < 0) |
|---|
| 343 | 342 | return irq; |
|---|
| 344 | | - } |
|---|
| 345 | 343 | |
|---|
| 346 | | - res_mem = platform_get_resource(pdev, IORESOURCE_MEM, 0); |
|---|
| 347 | | - regs = devm_ioremap_resource(dev, res_mem); |
|---|
| 344 | + regs = devm_platform_ioremap_resource(pdev, 0); |
|---|
| 348 | 345 | if (IS_ERR(regs)) |
|---|
| 349 | 346 | return PTR_ERR(regs); |
|---|
| 350 | 347 | |
|---|
| .. | .. |
|---|
| 353 | 350 | if (IS_ERR(clk)) |
|---|
| 354 | 351 | return PTR_ERR(clk); |
|---|
| 355 | 352 | |
|---|
| 353 | + reset = devm_reset_control_get_optional_exclusive(dev, NULL); |
|---|
| 354 | + if (IS_ERR(reset)) |
|---|
| 355 | + return PTR_ERR(reset); |
|---|
| 356 | + |
|---|
| 356 | 357 | ret = clk_prepare_enable(clk); |
|---|
| 357 | 358 | if (ret) |
|---|
| 358 | 359 | return ret; |
|---|
| 359 | 360 | |
|---|
| 361 | + ret = reset_control_reset(reset); |
|---|
| 362 | + if (ret) { |
|---|
| 363 | + dev_err(dev, "unable to reset device: %d\n", ret); |
|---|
| 364 | + goto out_disable_clk; |
|---|
| 365 | + } |
|---|
| 366 | + |
|---|
| 360 | 367 | rate = clk_get_rate(clk); |
|---|
| 361 | 368 | if (!rate) { |
|---|
| 362 | 369 | pll_clk = devm_clk_get(dev, "pll"); |
|---|