diff --git a/arch/arm/boot/dts/bcm2708.dtsi b/arch/arm/boot/dts/bcm2708.dtsi index 96b7311a797b..93f009a5e89b 100644 --- a/arch/arm/boot/dts/bcm2708.dtsi +++ b/arch/arm/boot/dts/bcm2708.dtsi @@ -82,5 +82,13 @@ compatible = "simple-bus"; #address-cells = <1>; #size-cells = <0>; + + clk_spi: clock@2 { + compatible = "fixed-clock"; + reg = <2>; + #clock-cells = <0>; + clock-output-names = "spi"; + clock-frequency = <250000000>; + }; }; }; diff --git a/arch/arm/mach-bcm2708/bcm2708.c b/arch/arm/mach-bcm2708/bcm2708.c index a207ad851d2a..e366bb49eefb 100644 --- a/arch/arm/mach-bcm2708/bcm2708.c +++ b/arch/arm/mach-bcm2708/bcm2708.c @@ -836,7 +836,7 @@ void __init bcm2708_init(void) for (i = 0; i < ARRAY_SIZE(bcm2708_alsa_devices); i++) bcm_register_device(&bcm2708_alsa_devices[i]); - bcm_register_device(&bcm2708_spi_device); + bcm_register_device_dt(&bcm2708_spi_device); bcm_register_device(&bcm2708_bsc0_device); bcm_register_device(&bcm2708_bsc1_device); @@ -876,8 +876,9 @@ void __init bcm2708_init(void) system_serial_low = serial; #ifdef CONFIG_BCM2708_SPIDEV - spi_register_board_info(bcm2708_spi_devices, - ARRAY_SIZE(bcm2708_spi_devices)); + if (!use_dt) + spi_register_board_info(bcm2708_spi_devices, + ARRAY_SIZE(bcm2708_spi_devices)); #endif } diff --git a/drivers/spi/Kconfig b/drivers/spi/Kconfig index 9628e75de77f..113bf643fc3e 100644 --- a/drivers/spi/Kconfig +++ b/drivers/spi/Kconfig @@ -77,7 +77,7 @@ config SPI_ATMEL config SPI_BCM2835 tristate "BCM2835 SPI controller" - depends on ARCH_BCM2835 || COMPILE_TEST + depends on ARCH_BCM2835 || ARCH_BCM2708 || ARCH_BCM2709 || COMPILE_TEST help This selects a driver for the Broadcom BCM2835 SPI master. @@ -88,7 +88,7 @@ config SPI_BCM2835 config SPI_BCM2708 tristate "BCM2708 SPI controller driver (SPI0)" - depends on MACH_BCM2708 + depends on MACH_BCM2708 || MACH_BCM2709 help This selects a driver for the Broadcom BCM2708 SPI master (SPI0). This driver is not compatible with the "Universal SPI Master" or the SPI slave diff --git a/drivers/spi/spi-bcm2708.c b/drivers/spi/spi-bcm2708.c index 349d21fe3fe3..041b5e29ca5d 100644 --- a/drivers/spi/spi-bcm2708.c +++ b/drivers/spi/spi-bcm2708.c @@ -512,6 +512,7 @@ static int bcm2708_spi_probe(struct platform_device *pdev) master->setup = bcm2708_spi_setup; master->transfer = bcm2708_spi_transfer; master->cleanup = bcm2708_spi_cleanup; + master->dev.of_node = pdev->dev.of_node; platform_set_drvdata(pdev, master); bs = spi_master_get_devdata(master); @@ -596,10 +597,17 @@ static int bcm2708_spi_remove(struct platform_device *pdev) return 0; } +static const struct of_device_id bcm2708_spi_match[] = { + { .compatible = "brcm,bcm2708-spi", }, + {} +}; +MODULE_DEVICE_TABLE(of, bcm2708_spi_match); + static struct platform_driver bcm2708_spi_driver = { .driver = { .name = DRV_NAME, .owner = THIS_MODULE, + .of_match_table = bcm2708_spi_match, }, .probe = bcm2708_spi_probe, .remove = bcm2708_spi_remove,