File: 0064-Merge-abstract-buses-changes-with-fix-SPI-flash-read.patch

package info (click to toggle)
hackrf 2015.07.2-11
  • links: PTS, VCS
  • area: main
  • in suites: stretch
  • size: 69,764 kB
  • ctags: 9,327
  • sloc: ansic: 13,907; python: 696; vhdl: 218; sh: 32; makefile: 15
file content (94 lines) | stat: -rw-r--r-- 3,046 bytes parent folder | download | duplicates (2)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
From 87f59de104364da2a50ce8c6c633415383f50687 Mon Sep 17 00:00:00 2001
From: Dominic Spill <dominicgs@gmail.com>
Date: Sun, 20 Dec 2015 15:28:29 +0000
Subject: [PATCH 64/68] Merge "abstract buses" changes with "fix SPI flash
 read"

---
 firmware/common/rf_path.c              |  2 +-
 firmware/common/w25q80bv.c             | 35 ++++++++++++++++++----------------
 firmware/common/w25q80bv.h             |  2 +-
 firmware/hackrf_usb/hackrf_usb.c       |  3 ---
 firmware/hackrf_usb/usb_api_spiflash.c |  2 +-
 firmware/libopencm3                    |  2 +-
 6 files changed, 23 insertions(+), 23 deletions(-)

--- a/firmware/common/rf_path.c
+++ b/firmware/common/rf_path.c
@@ -268,7 +268,7 @@
 #ifdef HACKRF_ONE
 		rf_path_set_antenna(0);
 #endif
-		rf_path_set_lna(0);
+		rf_path_set_lna(rf_path, 0);
 		/* Set RF path to receive direction when "off" */
 		switchctrl &= ~SWITCHCTRL_TX;
 		rffc5071_disable(&rffc5072);
--- a/firmware/common/w25q80bv.c
+++ b/firmware/common/w25q80bv.c
@@ -199,24 +199,27 @@
 	}
 }
 
-void w25q80bv_read(uint32_t addr, uint32_t len, uint8_t* const data)
+/* write an arbitrary number of bytes */
+void w25q80bv_read(w25q80bv_driver_t* const drv, uint32_t addr, uint32_t len, uint8_t* const data)
 {
-	uint32_t i;
-
 	/* do nothing if we would overflow the flash */
-	if ((len > W25Q80BV_NUM_BYTES) || (addr > W25Q80BV_NUM_BYTES)
-			|| ((addr + len) > W25Q80BV_NUM_BYTES))
+	if ((len > drv->num_bytes) || (addr > drv->num_bytes)
+			|| ((addr + len) > drv->num_bytes))
 		return;
 
-	w25q80bv_wait_while_busy();
+	w25q80bv_wait_while_busy(drv);
+
+	uint8_t header[] = {
+		W25Q80BV_FAST_READ,
+		(addr & 0xFF0000) >> 16,
+		(addr & 0xFF00) >> 8,
+		addr & 0xFF
+	};
+
+	const spi_transfer_t transfers[] = {
+		{ header, ARRAY_SIZE(header) },
+		{ data, len }
+	};
 
-	gpio_clear(PORT_SSP0_SSEL, PIN_SSP0_SSEL);
-	ssp_transfer(SSP0_NUM, W25Q80BV_FAST_READ);
-	ssp_transfer(SSP0_NUM, (addr >> 16) & 0xFF);
-	ssp_transfer(SSP0_NUM, (addr >>  8) & 0xFF);
-	ssp_transfer(SSP0_NUM, (addr >>  0) & 0xFF);
-	ssp_transfer(SSP0_NUM, 0xFF);
-	for (i = 0; i < len; i++)
-		data[i] = ssp_transfer(SSP0_NUM, 0xFF);
-	gpio_set(PORT_SSP0_SSEL, PIN_SSP0_SSEL);
+	spi_bus_transfer_gather(drv->bus, transfers, ARRAY_SIZE(transfers));
 }
--- a/firmware/hackrf_usb/hackrf_usb.c
+++ b/firmware/hackrf_usb/hackrf_usb.c
@@ -221,9 +221,6 @@
 #endif
 	cpu_clock_init();
 
-	/* Code is not running from SPI flash, initialize for flash read/write over USB */
-	w25q80bv_setup();
-
 	usb_set_descriptor_by_serial_number();
 
 	usb_set_configuration_changed_cb(usb_configuration_changed);
--- a/firmware/hackrf_usb/usb_api_spiflash.c
+++ b/firmware/hackrf_usb/usb_api_spiflash.c
@@ -99,7 +99,7 @@
 			    || ((addr + len) > spi_flash.num_bytes)) {
 			return USB_REQUEST_STATUS_STALL;
 		} else {
-			w25q80bv_read(addr, len, &spiflash_buffer[0]);
+			w25q80bv_read(&spi_flash, addr, len, &spiflash_buffer[0]);
 			usb_transfer_schedule_block(endpoint->in, &spiflash_buffer[0], len,
 						    NULL, NULL);
 			return USB_REQUEST_STATUS_OK;