Commit 6489b8749d33ad35b8d2e24674708508f4bedabc

Authored by Jean-Michel Friedt
1 parent 01d6714696
Exists in master

driver prenant le mot en bits et non la frequence

Showing 2 changed files with 1123 additions and 0 deletions Inline Diff

220124_AD9832driver/ad9832.c
File was created 1 // SPDX-License-Identifier: GPL-2.0
2 /*
3 * AD9832 SPI DDS driver
4 *
5 * Copyright 2011 Analog Devices Inc.
6 */
7
8 #include <asm/div64.h>
9
10 #include <linux/clk.h>
11 #include <linux/device.h>
12 #include <linux/err.h>
13 #include <linux/kernel.h>
14 #include <linux/module.h>
15 #include <linux/regulator/consumer.h>
16 #include <linux/slab.h>
17 #include <linux/spi/spi.h>
18 #include <linux/sysfs.h>
19
20 #include <linux/iio/iio.h>
21 #include <linux/iio/sysfs.h>
22
23 #include "ad9832.h"
24
25 #include "dds.h"
26
27 /* Registers */
28
29 #define AD9832_FREQ0LL 0x0
30 #define AD9832_FREQ0HL 0x1
31 #define AD9832_FREQ0LM 0x2
32 #define AD9832_FREQ0HM 0x3
33 #define AD9832_FREQ1LL 0x4
34 #define AD9832_FREQ1HL 0x5
35 #define AD9832_FREQ1LM 0x6
36 #define AD9832_FREQ1HM 0x7
37 #define AD9832_PHASE0L 0x8
38 #define AD9832_PHASE0H 0x9
39 #define AD9832_PHASE1L 0xA
40 #define AD9832_PHASE1H 0xB
41 #define AD9832_PHASE2L 0xC
42 #define AD9832_PHASE2H 0xD
43 #define AD9832_PHASE3L 0xE
44 #define AD9832_PHASE3H 0xF
45
46 #define AD9832_PHASE_SYM 0x10
47 #define AD9832_FREQ_SYM 0x11
48 #define AD9832_PINCTRL_EN 0x12
49 #define AD9832_OUTPUT_EN 0x13
50
51 /* Command Control Bits */
52
53 #define AD9832_CMD_PHA8BITSW 0x1
54 #define AD9832_CMD_PHA16BITSW 0x0
55 #define AD9832_CMD_FRE8BITSW 0x3
56 #define AD9832_CMD_FRE16BITSW 0x2
57 #define AD9832_CMD_FPSELECT 0x6
58 #define AD9832_CMD_SYNCSELSRC 0x8
59 #define AD9832_CMD_SLEEPRESCLR 0xC
60
61 #define AD9832_FREQ BIT(11)
62 #define AD9832_PHASE(x) (((x) & 3) << 9)
63 #define AD9832_SYNC BIT(13)
64 #define AD9832_SELSRC BIT(12)
65 #define AD9832_SLEEP BIT(13)
66 #define AD9832_RESET BIT(12)
67 #define AD9832_CLR BIT(11)
68 #define CMD_SHIFT 12
69 #define ADD_SHIFT 8
70 #define AD9832_FREQ_BITS 32
71 #define AD9832_PHASE_BITS 12
72 #define RES_MASK(bits) ((1 << (bits)) - 1)
73
74 /**
75 * struct ad9832_state - driver instance specific data
76 * @spi: spi_device
77 * @avdd: supply regulator for the analog section
78 * @dvdd: supply regulator for the digital section
79 * @mclk: external master clock
80 * @ctrl_fp: cached frequency/phase control word
81 * @ctrl_ss: cached sync/selsrc control word
82 * @ctrl_src: cached sleep/reset/clr word
83 * @xfer: default spi transfer
84 * @msg: default spi message
85 * @freq_xfer: tuning word spi transfer
86 * @freq_msg: tuning word spi message
87 * @phase_xfer: tuning word spi transfer
88 * @phase_msg: tuning word spi message
89 * @lock protect sensor state
90 * @data: spi transmit buffer
91 * @phase_data: tuning word spi transmit buffer
92 * @freq_data: tuning word spi transmit buffer
93 */
94
95 struct ad9832_state {
96 struct spi_device *spi;
97 struct regulator *avdd;
98 struct regulator *dvdd;
99 struct clk *mclk;
100 unsigned short ctrl_fp;
101 unsigned short ctrl_ss;
102 unsigned short ctrl_src;
103 struct spi_transfer xfer;
104 struct spi_message msg;
105 struct spi_transfer freq_xfer[4];
106 struct spi_message freq_msg;
107 struct spi_transfer phase_xfer[2];
108 struct spi_message phase_msg;
109 struct mutex lock; /* protect sensor state */
110 /*
111 * DMA (thus cache coherency maintenance) requires the
112 * transfer buffers to live in their own cache lines.
113 */
114 union {
115 __be16 freq_data[4]____cacheline_aligned;
116 __be16 phase_data[2];
117 __be16 data;
118 };
119 };
120
121 static unsigned long ad9832_calc_freqreg(unsigned long mclk, unsigned long fout)
122 {
123 // unsigned long long freqreg = (u64)fout *
124 // (u64)((u64)1L << AD9832_FREQ_BITS);
125 // do_div(freqreg, mclk);
126 return fout; // freqreg;
127 }
128
129 static int ad9832_write_frequency(struct ad9832_state *st,
130 unsigned int addr, unsigned long fout)
131 {
132 unsigned long regval;
133
134 // if (fout > (clk_get_rate(st->mclk) / 2))
135 // return -EINVAL;
136
137 regval = ad9832_calc_freqreg(clk_get_rate(st->mclk), fout);
138
139 st->freq_data[0] = cpu_to_be16((AD9832_CMD_FRE8BITSW << CMD_SHIFT) |
140 (addr << ADD_SHIFT) |
141 ((regval >> 24) & 0xFF));
142 st->freq_data[1] = cpu_to_be16((AD9832_CMD_FRE16BITSW << CMD_SHIFT) |
143 ((addr - 1) << ADD_SHIFT) |
144 ((regval >> 16) & 0xFF));
145 st->freq_data[2] = cpu_to_be16((AD9832_CMD_FRE8BITSW << CMD_SHIFT) |
146 ((addr - 2) << ADD_SHIFT) |
147 ((regval >> 8) & 0xFF));
148 st->freq_data[3] = cpu_to_be16((AD9832_CMD_FRE16BITSW << CMD_SHIFT) |
149 ((addr - 3) << ADD_SHIFT) |
150 ((regval >> 0) & 0xFF));
151
152 return spi_sync(st->spi, &st->freq_msg);
153 }
154
155 static int ad9832_write_phase(struct ad9832_state *st,
156 unsigned long addr, unsigned long phase)
157 {
158 if (phase > BIT(AD9832_PHASE_BITS))
159 return -EINVAL;
160
161 st->phase_data[0] = cpu_to_be16((AD9832_CMD_PHA8BITSW << CMD_SHIFT) |
162 (addr << ADD_SHIFT) |
163 ((phase >> 8) & 0xFF));
164 st->phase_data[1] = cpu_to_be16((AD9832_CMD_PHA16BITSW << CMD_SHIFT) |
165 ((addr - 1) << ADD_SHIFT) |
166 (phase & 0xFF));
167
168 return spi_sync(st->spi, &st->phase_msg);
169 }
170
171 static ssize_t ad9832_write(struct device *dev, struct device_attribute *attr,
172 const char *buf, size_t len)
173 {
174 struct iio_dev *indio_dev = dev_to_iio_dev(dev);
175 struct ad9832_state *st = iio_priv(indio_dev);
176 struct iio_dev_attr *this_attr = to_iio_dev_attr(attr);
177 int ret;
178 unsigned long val;
179
180 ret = kstrtoul(buf, 10, &val);
181 if (ret)
182 goto error_ret;
183
184 mutex_lock(&st->lock);
185 switch ((u32)this_attr->address) {
186 case AD9832_FREQ0HM:
187 case AD9832_FREQ1HM:
188 ret = ad9832_write_frequency(st, this_attr->address, val);
189 break;
190 case AD9832_PHASE0H:
191 case AD9832_PHASE1H:
192 case AD9832_PHASE2H:
193 case AD9832_PHASE3H:
194 ret = ad9832_write_phase(st, this_attr->address, val);
195 break;
196 case AD9832_PINCTRL_EN:
197 if (val)
198 st->ctrl_ss &= ~AD9832_SELSRC;
199 else
200 st->ctrl_ss |= AD9832_SELSRC;
201 st->data = cpu_to_be16((AD9832_CMD_SYNCSELSRC << CMD_SHIFT) |
202 st->ctrl_ss);
203 ret = spi_sync(st->spi, &st->msg);
204 break;
205 case AD9832_FREQ_SYM:
206 if (val == 1) {
207 st->ctrl_fp |= AD9832_FREQ;
208 } else if (val == 0) {
209 st->ctrl_fp &= ~AD9832_FREQ;
210 } else {
211 ret = -EINVAL;
212 break;
213 }
214 st->data = cpu_to_be16((AD9832_CMD_FPSELECT << CMD_SHIFT) |
215 st->ctrl_fp);
216 ret = spi_sync(st->spi, &st->msg);
217 break;
218 case AD9832_PHASE_SYM:
219 if (val > 3) {
220 ret = -EINVAL;
221 break;
222 }
223
224 st->ctrl_fp &= ~AD9832_PHASE(3);
225 st->ctrl_fp |= AD9832_PHASE(val);
226
227 st->data = cpu_to_be16((AD9832_CMD_FPSELECT << CMD_SHIFT) |
228 st->ctrl_fp);
229 ret = spi_sync(st->spi, &st->msg);
230 break;
231 case AD9832_OUTPUT_EN:
232 if (val)
233 st->ctrl_src &= ~(AD9832_RESET | AD9832_SLEEP |
234 AD9832_CLR);
235 else
236 st->ctrl_src |= AD9832_RESET;
237
238 st->data = cpu_to_be16((AD9832_CMD_SLEEPRESCLR << CMD_SHIFT) |
239 st->ctrl_src);
240 ret = spi_sync(st->spi, &st->msg);
241 break;
242 default:
243 ret = -ENODEV;
244 }
245 mutex_unlock(&st->lock);
246
247 error_ret:
248 return ret ? ret : len;
249 }
250
251 /**
252 * see dds.h for further information
253 */
254
255 static IIO_DEV_ATTR_FREQ(0, 0, 0200, NULL, ad9832_write, AD9832_FREQ0HM);
256 static IIO_DEV_ATTR_FREQ(0, 1, 0200, NULL, ad9832_write, AD9832_FREQ1HM);
257 static IIO_DEV_ATTR_FREQSYMBOL(0, 0200, NULL, ad9832_write, AD9832_FREQ_SYM);
258 static IIO_CONST_ATTR_FREQ_SCALE(0, "1"); /* 1Hz */
259
260 static IIO_DEV_ATTR_PHASE(0, 0, 0200, NULL, ad9832_write, AD9832_PHASE0H);
261 static IIO_DEV_ATTR_PHASE(0, 1, 0200, NULL, ad9832_write, AD9832_PHASE1H);
262 static IIO_DEV_ATTR_PHASE(0, 2, 0200, NULL, ad9832_write, AD9832_PHASE2H);
263 static IIO_DEV_ATTR_PHASE(0, 3, 0200, NULL, ad9832_write, AD9832_PHASE3H);
264 static IIO_DEV_ATTR_PHASESYMBOL(0, 0200, NULL,
265 ad9832_write, AD9832_PHASE_SYM);
266 static IIO_CONST_ATTR_PHASE_SCALE(0, "0.0015339808"); /* 2PI/2^12 rad*/
267
268 static IIO_DEV_ATTR_PINCONTROL_EN(0, 0200, NULL,
269 ad9832_write, AD9832_PINCTRL_EN);
270 static IIO_DEV_ATTR_OUT_ENABLE(0, 0200, NULL,
271 ad9832_write, AD9832_OUTPUT_EN);
272
273 static struct attribute *ad9832_attributes[] = {
274 &iio_dev_attr_out_altvoltage0_frequency0.dev_attr.attr,
275 &iio_dev_attr_out_altvoltage0_frequency1.dev_attr.attr,
276 &iio_const_attr_out_altvoltage0_frequency_scale.dev_attr.attr,
277 &iio_dev_attr_out_altvoltage0_phase0.dev_attr.attr,
278 &iio_dev_attr_out_altvoltage0_phase1.dev_attr.attr,
279 &iio_dev_attr_out_altvoltage0_phase2.dev_attr.attr,
280 &iio_dev_attr_out_altvoltage0_phase3.dev_attr.attr,
281 &iio_const_attr_out_altvoltage0_phase_scale.dev_attr.attr,
282 &iio_dev_attr_out_altvoltage0_pincontrol_en.dev_attr.attr,
283 &iio_dev_attr_out_altvoltage0_frequencysymbol.dev_attr.attr,
284 &iio_dev_attr_out_altvoltage0_phasesymbol.dev_attr.attr,
285 &iio_dev_attr_out_altvoltage0_out_enable.dev_attr.attr,
286 NULL,
287 };
288
289 static const struct attribute_group ad9832_attribute_group = {
290 .attrs = ad9832_attributes,
291 };
292
293 static const struct iio_info ad9832_info = {
294 .attrs = &ad9832_attribute_group,
295 };
296
297 #if defined(CONFIG_OF)
298 static struct ad9832_platform_data *ad9832_parse_dt(struct spi_device *spi)
299 {
300 struct ad9832_platform_data *pdata;
301 struct device_node *np = spi->dev.of_node;
302 unsigned int tmp;
303
304 pdata = devm_kzalloc(&spi->dev, sizeof(*pdata), GFP_KERNEL);
305 if (!pdata)
306 return ERR_PTR(-ENOMEM);
307
308 pdata->freq0 = 134000;
309 of_property_read_u32(np, "freq0", &tmp);
310 pdata->freq0=(unsigned int)tmp;
311
312 pdata->freq1 = 134000;
313 of_property_read_u32(np, "freq1", &tmp);
314 pdata->freq1=(unsigned int)tmp;
315
316 pdata->phase0 = 0;
317 of_property_read_u16(np, "phase0", &pdata->phase0);
318
319 pdata->phase1 = 0;
320 of_property_read_u16(np, "phase1", &pdata->phase1);
321
322 pdata->phase2 = 0;
323 of_property_read_u16(np, "phase1", &pdata->phase2);
324
325 pdata->phase3 = 0;
326 of_property_read_u16(np, "phase1", &pdata->phase3);
327
328 return pdata;
329 }
330 #else
331 static struct ad9832_platform_data *ad9832_parse_dt(struct spi_device *spi)
332 {
333 return NULL;
334 }
335 #endif
336
337 static int ad9832_probe(struct spi_device *spi)
338 {
339 struct ad9832_platform_data *pdata = dev_get_platdata(&spi->dev);
340 struct iio_dev *indio_dev;
341 struct ad9832_state *st;
342 int ret;
343
344 if (!pdata && spi->dev.of_node) {
345 pdata = ad9832_parse_dt(spi);
346 if (IS_ERR(pdata))
347 return PTR_ERR(pdata);
348 }
349
350 if (!pdata) {
351 dev_dbg(&spi->dev, "no platform data?\n");
352 return -ENODEV;
353 }
354
355 indio_dev = devm_iio_device_alloc(&spi->dev, sizeof(*st));
356 if (!indio_dev)
357 return -ENOMEM;
358
359 spi_set_drvdata(spi, indio_dev);
360 st = iio_priv(indio_dev);
361
362 st->avdd = devm_regulator_get(&spi->dev, "avdd");
363 if (IS_ERR(st->avdd))
364 return PTR_ERR(st->avdd);
365
366 ret = regulator_enable(st->avdd);
367 if (ret) {
368 dev_err(&spi->dev, "Failed to enable specified AVDD supply\n");
369 return ret;
370 }
371
372 st->dvdd = devm_regulator_get(&spi->dev, "dvdd");
373 if (IS_ERR(st->dvdd)) {
374 ret = PTR_ERR(st->dvdd);
375 goto error_disable_avdd;
376 }
377
378 ret = regulator_enable(st->dvdd);
379 if (ret) {
380 dev_err(&spi->dev, "Failed to enable specified DVDD supply\n");
381 goto error_disable_avdd;
382 }
383
384 st->mclk = devm_clk_get(&spi->dev, "mclk");
385 if (IS_ERR(st->mclk)) {
386 ret = PTR_ERR(st->mclk);
387 goto error_disable_dvdd;
388 }
389
390 ret = clk_prepare_enable(st->mclk);
391 if (ret < 0)
392 goto error_disable_dvdd;
393
394 st->spi = spi;
395 mutex_init(&st->lock);
396
397 indio_dev->name = spi_get_device_id(spi)->name;
398 indio_dev->info = &ad9832_info;
399 indio_dev->modes = INDIO_DIRECT_MODE;
400
401 /* Setup default messages */
402
403 st->xfer.tx_buf = &st->data;
404 st->xfer.len = 2;
405
406 spi_message_init(&st->msg);
407 spi_message_add_tail(&st->xfer, &st->msg);
408
409 st->freq_xfer[0].tx_buf = &st->freq_data[0];
410 st->freq_xfer[0].len = 2;
411 st->freq_xfer[0].cs_change = 1;
412 st->freq_xfer[1].tx_buf = &st->freq_data[1];
413 st->freq_xfer[1].len = 2;
414 st->freq_xfer[1].cs_change = 1;
415 st->freq_xfer[2].tx_buf = &st->freq_data[2];
416 st->freq_xfer[2].len = 2;
417 st->freq_xfer[2].cs_change = 1;
418 st->freq_xfer[3].tx_buf = &st->freq_data[3];
419 st->freq_xfer[3].len = 2;
420
421 spi_message_init(&st->freq_msg);
422 spi_message_add_tail(&st->freq_xfer[0], &st->freq_msg);
423 spi_message_add_tail(&st->freq_xfer[1], &st->freq_msg);
424 spi_message_add_tail(&st->freq_xfer[2], &st->freq_msg);
425 spi_message_add_tail(&st->freq_xfer[3], &st->freq_msg);
426
427 st->phase_xfer[0].tx_buf = &st->phase_data[0];
428 st->phase_xfer[0].len = 2;
429 st->phase_xfer[0].cs_change = 1;
430 st->phase_xfer[1].tx_buf = &st->phase_data[1];
431 st->phase_xfer[1].len = 2;
432
433 spi_message_init(&st->phase_msg);
434 spi_message_add_tail(&st->phase_xfer[0], &st->phase_msg);
435 spi_message_add_tail(&st->phase_xfer[1], &st->phase_msg);
436
220124_AD9832driver/bcm2711-rpi-4-b.dts
File was created 1 // SPDX-License-Identifier: GPL-2.0
2 /dts-v1/;
3 #include "bcm2711.dtsi"
4 #include "bcm2835-rpi.dtsi"
5
6 / {
7 compatible = "raspberrypi,4-model-b", "brcm,bcm2711";
8 model = "Raspberry Pi 4 Model B";
9
10 chosen {
11 /* 8250 auxiliary UART instead of pl011 */
12 stdout-path = "serial1:115200n8";
13 };
14
15 /* Will be filled by the bootloader */
16 memory@0 {
17 device_type = "memory";
18 reg = <0 0 0>;
19 };
20
21 aliases {
22 emmc2bus = &emmc2bus;
23 ethernet0 = &genet;
24 pcie0 = &pcie0;
25 };
26
27 leds {
28 act {
29 gpios = <&gpio 42 GPIO_ACTIVE_HIGH>;
30 };
31
32 pwr {
33 label = "PWR";
34 gpios = <&expgpio 2 GPIO_ACTIVE_LOW>;
35 default-state = "keep";
36 linux,default-trigger = "default-on";
37 };
38 };
39
40 wifi_pwrseq: wifi-pwrseq {
41 compatible = "mmc-pwrseq-simple";
42 reset-gpios = <&expgpio 1 GPIO_ACTIVE_LOW>;
43 };
44
45 sd_io_1v8_reg: sd_io_1v8_reg {
46 compatible = "regulator-gpio";
47 regulator-name = "vdd-sd-io";
48 regulator-min-microvolt = <1800000>;
49 regulator-max-microvolt = <3300000>;
50 regulator-boot-on;
51 regulator-always-on;
52 regulator-settling-time-us = <5000>;
53 gpios = <&expgpio 4 GPIO_ACTIVE_HIGH>;
54 states = <1800000 0x1
55 3300000 0x0>;
56 status = "okay";
57 };
58 };
59
60 &firmware {
61 expgpio: gpio {
62 compatible = "raspberrypi,firmware-gpio";
63 gpio-controller;
64 #gpio-cells = <2>;
65 gpio-line-names = "BT_ON",
66 "WL_ON",
67 "PWR_LED_OFF",
68 "GLOBAL_RESET",
69 "VDD_SD_IO_SEL",
70 "CAM_GPIO",
71 "SD_PWR_ON",
72 "SD_OC_N";
73 status = "okay";
74 };
75 };
76
77 &gpio {
78 /*
79 * Parts taken from rpi_SCH_4b_4p0_reduced.pdf and
80 * the official GPU firmware DT blob.
81 *
82 * Legend:
83 * "FOO" = GPIO line named "FOO" on the schematic
84 * "FOO_N" = GPIO line named "FOO" on schematic, active low
85 */
86 gpio-line-names = "ID_SDA",
87 "ID_SCL",
88 "SDA1",
89 "SCL1",
90 "GPIO_GCLK",
91 "GPIO5",
92 "GPIO6",
93 "SPI_CE1_N",
94 "SPI_CE0_N",
95 "SPI_MISO",
96 "SPI_MOSI",
97 "SPI_SCLK",
98 "GPIO12",
99 "GPIO13",
100 /* Serial port */
101 "TXD1",
102 "RXD1",
103 "GPIO16",
104 "GPIO17",
105 "GPIO18",
106 "GPIO19",
107 "GPIO20",
108 "GPIO21",
109 "GPIO22",
110 "GPIO23",
111 "GPIO24",
112 "GPIO25",
113 "GPIO26",
114 "GPIO27",
115 "RGMII_MDIO",
116 "RGMIO_MDC",
117 /* Used by BT module */
118 "CTS0",
119 "RTS0",
120 "TXD0",
121 "RXD0",
122 /* Used by Wifi */
123 "SD1_CLK",
124 "SD1_CMD",
125 "SD1_DATA0",
126 "SD1_DATA1",
127 "SD1_DATA2",
128 "SD1_DATA3",
129 /* Shared with SPI flash */
130 "PWM0_MISO",
131 "PWM1_MOSI",
132 "STATUS_LED_G_CLK",
133 "SPIFLASH_CE_N",
134 "SDA0",
135 "SCL0",
136 "RGMII_RXCLK",
137 "RGMII_RXCTL",
138 "RGMII_RXD0",
139 "RGMII_RXD1",
140 "RGMII_RXD2",
141 "RGMII_RXD3",
142 "RGMII_TXCLK",
143 "RGMII_TXCTL",
144 "RGMII_TXD0",
145 "RGMII_TXD1",
146 "RGMII_TXD2",
147 "RGMII_TXD3";
148 };
149
150 &pwm1 {
151 pinctrl-names = "default";
152 pinctrl-0 = <&pwm1_0_gpio40 &pwm1_1_gpio41>;
153 status = "okay";
154 };
155
156 /* SDHCI is used to control the SDIO for wireless */
157 &sdhci {
158 #address-cells = <1>;
159 #size-cells = <0>;
160 pinctrl-names = "default";
161 pinctrl-0 = <&emmc_gpio34>;
162 bus-width = <4>;
163 non-removable;
164 mmc-pwrseq = <&wifi_pwrseq>;
165 status = "okay";
166
167 brcmf: wifi@1 {
168 reg = <1>;
169 compatible = "brcm,bcm4329-fmac";
170 };
171 };
172
173 /* EMMC2 is used to drive the SD card */
174 &emmc2 {
175 vqmmc-supply = <&sd_io_1v8_reg>;
176 broken-cd;
177 status = "okay";
178 };
179
180 &genet {
181 phy-handle = <&phy1>;
182 phy-mode = "rgmii-rxid";
183 status = "okay";
184 };
185
186 &genet_mdio {
187 phy1: ethernet-phy@1 {
188 /* No PHY interrupt */
189 reg = <0x1>;
190 };
191 };
192
193 /* uart0 communicates with the BT module */
194 &uart0 {
195 pinctrl-names = "default";
196 pinctrl-0 = <&uart0_ctsrts_gpio30 &uart0_gpio32>;
197 uart-has-rtscts;
198 status = "okay";
199
200 bluetooth {
201 compatible = "brcm,bcm43438-bt";
202 max-speed = <2000000>;
203 shutdown-gpios = <&expgpio 0 GPIO_ACTIVE_HIGH>;
204 };
205 };
206
207 /* uart1 is mapped to the pin header */
208 &uart1 {
209 pinctrl-names = "default";
210 pinctrl-0 = <&uart1_gpio14>;
211 status = "okay";
212 };
213
214 &vchiq {
215 interrupts = <GIC_SPI 34 IRQ_TYPE_LEVEL_HIGH>;
216 };
217
218 // =============================================
219 // Downstream rpi- changes
220
221 #include "bcm270x.dtsi"
222 #include "bcm271x-rpi-bt.dtsi"
223
224 / {
225 soc {
226 /delete-node/ pixelvalve@7e807000;
227 /delete-node/ hdmi@7e902000;
228 };
229 };
230
231 #include "bcm2711-rpi.dtsi"
232 #include "bcm283x-rpi-csi1-2lane.dtsi"
233 #include "bcm283x-rpi-i2c0mux_0_44.dtsi"
234
235 / {
236 chosen {
237 bootargs = "coherent_pool=1M 8250.nr_uarts=1 snd_bcm2835.enable_compat_alsa=0 snd_bcm2835.enable_hdmi=1 snd_bcm2835.enable_headphones=1";
238 };
239
240 aliases {
241 serial0 = &uart1;
242 serial1 = &uart0;
243 mmc0 = &emmc2;
244 mmc1 = &mmcnr;
245 mmc2 = &sdhost;
246 /delete-property/ i2c2;
247 i2c3 = &i2c3;
248 i2c4 = &i2c4;
249 i2c5 = &i2c5;
250 i2c6 = &i2c6;
251 /delete-property/ intc;
252 };
253
254 vcc: fixedregulator@0 {
255 compatible = "regulator-fixed";
256 regulator-name = "fixed-supply";
257 regulator-min-microvolt = <2500000>;
258 regulator-max-microvolt = <2500000>;
259 regulator-boot-on;
260 };
261
262 osc: oscillator {
263 #clock-cells = <0>;
264 compatible = "fixed-clock";
265 clock-frequency = <25000000>;
266 clock-output-names = "mclk";
267 };
268
269 /delete-node/ wifi-pwrseq;
270 };
271
272 &mmcnr {
273 pinctrl-names = "default";
274 pinctrl-0 = <&sdio_pins>;
275 bus-width = <4>;
276 status = "okay";
277 };
278
279 &uart0 {
280 pinctrl-0 = <&uart0_pins &bt_pins>;
281 status = "okay";
282 };
283
284 &uart1 {
285 pinctrl-0 = <&uart1_pins>;
286 };
287
288 &spi0 {
289 pinctrl-names = "default";
290 pinctrl-0 = <&spi0_pins &spi0_cs_pins>;
291 cs-gpios = <&gpio 8 1>, <&gpio 7 1>;
292 status = "okay";
293
294 ad9832@0{
295 #clock-cells = <0>;
296 compatible = "ad9832";
297 reg = <0>;
298 spi-max-frequency = <1000000>;
299 spi-cpol;
300 //spi-cpha; // mode 2 => CPHA = CPOL = 1
301 clocks = <&osc>;
302 clock-names="mclk";
303 vcc-supply = <&vcc>;
304 };
305
306 //spidev0: spidev@0{
307 // compatible = "spidev";
308 // reg = <0>; /* CE0 */
309 // #address-cells = <1>;
310 // #size-cells = <0>;
311 // spi-max-frequency = <125000000>;
312 //};
313
314 //spidev1: spidev@1{
315 // compatible = "spidev";
316 // reg = <1>; /* CE1 */
317 // #address-cells = <1>;
318 // #size-cells = <0>;
319 // spi-max-frequency = <125000000>;
320 //};
321 };
322
323 &gpio {
324 spi0_pins: spi0_pins {
325 brcm,pins = <9 10 11>;
326 brcm,function = <BCM2835_FSEL_ALT0>;
327 };
328
329 spi0_cs_pins: spi0_cs_pins {
330 brcm,pins = <8 7>;
331 brcm,function = <BCM2835_FSEL_GPIO_OUT>;
332 };
333
334 spi3_pins: spi3_pins {
335 brcm,pins = <1 2 3>;
336 brcm,function = <BCM2835_FSEL_ALT3>;
337 };
338
339 spi3_cs_pins: spi3_cs_pins {
340 brcm,pins = <0 24>;
341 brcm,function = <BCM2835_FSEL_GPIO_OUT>;
342 };
343
344 spi4_pins: spi4_pins {
345 brcm,pins = <5 6 7>;
346 brcm,function = <BCM2835_FSEL_ALT3>;
347 };
348
349 spi4_cs_pins: spi4_cs_pins {
350 brcm,pins = <4 25>;
351 brcm,function = <BCM2835_FSEL_GPIO_OUT>;
352 };
353
354 spi5_pins: spi5_pins {
355 brcm,pins = <13 14 15>;
356 brcm,function = <BCM2835_FSEL_ALT3>;
357 };
358
359 spi5_cs_pins: spi5_cs_pins {
360 brcm,pins = <12 26>;
361 brcm,function = <BCM2835_FSEL_GPIO_OUT>;
362 };
363
364 spi6_pins: spi6_pins {
365 brcm,pins = <19 20 21>;
366 brcm,function = <BCM2835_FSEL_ALT3>;
367 };
368
369 spi6_cs_pins: spi6_cs_pins {
370 brcm,pins = <18 27>;
371 brcm,function = <BCM2835_FSEL_GPIO_OUT>;
372 };
373
374 i2c0_pins: i2c0 {
375 brcm,pins = <0 1>;
376 brcm,function = <BCM2835_FSEL_ALT0>;
377 brcm,pull = <BCM2835_PUD_UP>;
378 };
379
380 i2c1_pins: i2c1 {
381 brcm,pins = <2 3>;
382 brcm,function = <BCM2835_FSEL_ALT0>;
383 brcm,pull = <BCM2835_PUD_UP>;
384 };
385
386 i2c3_pins: i2c3 {
387 brcm,pins = <4 5>;
388 brcm,function = <BCM2835_FSEL_ALT5>;
389 brcm,pull = <BCM2835_PUD_UP>;
390 };
391
392 i2c4_pins: i2c4 {
393 brcm,pins = <8 9>;
394 brcm,function = <BCM2835_FSEL_ALT5>;
395 brcm,pull = <BCM2835_PUD_UP>;
396 };
397
398 i2c5_pins: i2c5 {
399 brcm,pins = <12 13>;
400 brcm,function = <BCM2835_FSEL_ALT5>;
401 brcm,pull = <BCM2835_PUD_UP>;
402 };
403
404 i2c6_pins: i2c6 {
405 brcm,pins = <22 23>;
406 brcm,function = <BCM2835_FSEL_ALT5>;
407 brcm,pull = <BCM2835_PUD_UP>;
408 };
409
410 i2s_pins: i2s {
411 brcm,pins = <18 19 20 21>;
412 brcm,function = <BCM2835_FSEL_ALT0>;
413 };
414
415 sdio_pins: sdio_pins {
416 brcm,pins = <34 35 36 37 38 39>;
417 brcm,function = <BCM2835_FSEL_ALT3>; // alt3 = SD1
418 brcm,pull = <0 2 2 2 2 2>;
419 };
420
421 bt_pins: bt_pins {
422 brcm,pins = "-"; // non-empty to keep btuart happy, //4 = 0
423 // to fool pinctrl
424 brcm,function = <0>;
425 brcm,pull = <2>;
426 };
427
428 uart0_pins: uart0_pins {
429 brcm,pins = <32 33>;
430 brcm,function = <BCM2835_FSEL_ALT3>;
431 brcm,pull = <0 2>;
432 };
433
434 uart1_pins: uart1_pins {
435 brcm,pins;
436 brcm,function;
437 brcm,pull;
438 };
439
440 uart2_pins: uart2_pins {
441 brcm,pins = <0 1>;
442 brcm,function = <BCM2835_FSEL_ALT4>;
443 brcm,pull = <0 2>;
444 };
445
446 uart3_pins: uart3_pins {
447 brcm,pins = <4 5>;
448 brcm,function = <BCM2835_FSEL_ALT4>;
449 brcm,pull = <0 2>;
450 };
451
452 uart4_pins: uart4_pins {
453 brcm,pins = <8 9>;
454 brcm,function = <BCM2835_FSEL_ALT4>;
455 brcm,pull = <0 2>;
456 };
457
458 uart5_pins: uart5_pins {
459 brcm,pins = <12 13>;
460 brcm,function = <BCM2835_FSEL_ALT4>;
461 brcm,pull = <0 2>;
462 };
463 };
464
465 &i2c0if {
466 clock-frequency = <100000>;
467 };
468
469 &i2c1 {
470 pinctrl-names = "default";
471 pinctrl-0 = <&i2c1_pins>;
472 clock-frequency = <100000>;
473 };
474
475 &i2s {
476 pinctrl-names = "default";
477 pinctrl-0 = <&i2s_pins>;
478 };
479
480 / {
481 __overrides__ {
482 /delete-property/ i2c2_baudrate;
483 /delete-property/ i2c2_iknowwhatimdoing;
484 };
485 };
486
487 &firmwarekms {
488 compatible = "raspberrypi,rpi-firmware-kms-2711";
489 };
490
491 // =============================================
492 // Board specific stuff here
493
494 / {
495 sd_vcc_reg: sd_vcc_reg {
496 compatible = "regulator-fixed";
497 regulator-name = "vcc-sd";
498 regulator-min-microvolt = <3300000>;
499 regulator-max-microvolt = <3300000>;
500 regulator-boot-on;
501 enable-active-high;
502 gpio = <&expgpio 6 GPIO_ACTIVE_HIGH>;
503 };
504 };
505
506 &sdhost {
507 status = "disabled";
508 };
509
510 &emmc2 {
511 vmmc-supply = <&sd_vcc_reg>;
512 };
513
514 &phy1 {
515 led-modes = <0x00 0x08>; /* link/activity link */