Skip to content

Instantly share code, notes, and snippets.

@pdp7
Last active August 27, 2016 09:57
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save pdp7/df367e27d90e1f1779736e6b91328b06 to your computer and use it in GitHub Desktop.
Save pdp7/df367e27d90e1f1779736e6b91328b06 to your computer and use it in GitHub Desktop.
fbtft works for adafruit18 with Debian 8.2 (2015-12-07) with Linux 4.1.13-ti-r35
Debian GNU/Linux 8
BeagleBoard.org Debian Image 2015-12-07

root@beaglebone:~# cat /etc/debian_version 
8.2

root@beaglebone:~# uname -a
Linux beaglebone 4.1.13-ti-r35 #1 SMP PREEMPT Thu Dec 3 20:56:01 UTC 2015 armv7l GNU/Linux

root@beaglebone:~# echo BB-SPIDEV1 > /sys/devices/platform/bone_capemgr/slots

root@beaglebone:~# cat /sys/devices/platform/bone_capemgr/slots
 0: PF----  -1 
 1: PF----  -1 
 2: PF----  -1 
 3: PF----  -1 
 4: P-O-L-   0 Override Board Name,00A0,Override Manuf,BB-SPIDEV1

root@beaglebone:~# modprobe fbtft_device busnum=1 name=adafruit18 debug=7 verbose=3 gpios=dc:48,reset:60
@pdp7
Copy link
Author

pdp7 commented Aug 25, 2016

root@beaglebone:~# echo BB-SPIDEV1 > /sys/devices/platform/bone_capemgr/slots
root@beaglebone:~# dmesg -C
root@beaglebone:~# cat /sys/devices/platform/bone_capemgr/slots
 0: PF----  -1 
 1: PF----  -1 
 2: PF----  -1 
 3: PF----  -1 
 4: P-O-L-   0 Override Board Name,00A0,Override Manuf,BB-SPIDEV1
root@beaglebone:~# modprobe fbtft_device busnum=1 name=adafruit18 verbose=3 gpios=dc:48,reset:60
root@beaglebone:~# 
root@beaglebone:~# dmesg
[  963.383670] fbtft: module is from the staging directory, the quality is unknown, you have been warned.
[  963.403875] fbtft_device: module is from the staging directory, the quality is unknown, you have been warned.
[  963.414824] spidev spi1.1: spidev spi1.1 16000kHz 8 bits mode=0x00
[  963.414897] spidev spi1.0: spidev spi1.0 16000kHz 8 bits mode=0x01
[  963.415204] spidev spi1.0: Deleting spi1.0
[  963.423317] fbtft_device: GPIOS used by 'adafruit18':
[  963.423375] fbtft_device: 'dc' = GPIO48
[  963.423404] fbtft_device: 'reset' = GPIO60
[  963.423455] spidev spi1.1: spidev spi1.1 16000kHz 8 bits mode=0x00
[  963.423496] spi spi1.0: fb_st7735r spi1.0 32000kHz 8 bits mode=0x00
[  963.470084] fb_st7735r: module is from the staging directory, the quality is unknown, you have been warned.
[  964.406299] Console: switching to colour frame buffer device 16x20
[  964.406618] graphics fb0: fb_st7735r frame buffer, 128x160, 40 KiB video memory, 4 KiB DMA buffer memory, fps=20, spi1.0 at 32 MHz
root@beaglebone:~# 

@pdp7
Copy link
Author

pdp7 commented Aug 25, 2016

root@beaglebone:~# ls -ltar /dev/spidev1*   
crw-rw---- 1 root spi 153, 0 Aug 25 04:47 /dev/spidev1.1

@pdp7
Copy link
Author

pdp7 commented Aug 25, 2016

Debian 8.5 (2016-08-14) and Linux 4.4.16-ti-r38

root@beaglebone:~# echo BB-SPIDEV1 > /sys/devices/platform/bone_capemgr/slots

root@beaglebone:~# ls -ltar /dev/spidev2.*
crw-rw---- 1 root spi 153, 1 Aug 25 05:01 /dev/spidev2.1
crw-rw---- 1 root spi 153, 0 Aug 25 05:01 /dev/spidev2.0
root@beaglebone:~# 

@pdp7
Copy link
Author

pdp7 commented Aug 25, 2016

fbtft adafruit18 OK: Upgraded Debian 8.2 image to 8.5 via apt-get upgrade

[   64.549219] bone_capemgr bone_capemgr: part_number 'BB-SPIDEV1', version 'N/A'
[   64.549308] bone_capemgr bone_capemgr: slot #4: override
[   64.549357] bone_capemgr bone_capemgr: Using override eeprom data at slot 4
[   64.549408] bone_capemgr bone_capemgr: slot #4: 'Override Board Name,00A0,Override Manuf,BB-SPIDEV1'
[   64.780625] bone_capemgr bone_capemgr: slot #4: dtbo 'BB-SPIDEV1-00A0.dtbo' loaded; overlay id #0
[  101.345636] fbtft: module is from the staging directory, the quality is unknown, you have been warned.
[  101.375225] fbtft_device: module is from the staging directory, the quality is unknown, you have been warned.
[  101.378840] spidev spi1.1: spidev spi1.1 16000kHz 8 bits mode=0x00
[  101.378899] spidev spi1.0: spidev spi1.0 16000kHz 8 bits mode=0x01
[  101.391595] spidev spi1.0: Deleting spi1.0
[  101.395430] fbtft_device: GPIOS used by 'adafruit18':
[  101.395482] fbtft_device: 'dc' = GPIO48
[  101.395510] fbtft_device: 'reset' = GPIO60
[  101.395561] spidev spi1.1: spidev spi1.1 16000kHz 8 bits mode=0x00
[  101.395603] spi spi1.0: fb_st7735r spi1.0 32000kHz 8 bits mode=0x00
[  101.429151] fb_st7735r: module is from the staging directory, the quality is unknown, you have been warned.
[  102.357474] Console: switching to colour frame buffer device 16x20
[  102.357810] graphics fb0: fb_st7735r frame buffer, 128x160, 40 KiB video memory, 4 KiB DMA buffer memory, fps=20, spi1.0 at 32 MHz
root@beaglebone:~# cat /sys/devices/platform/bone_capemgr/slots
 0: PF----  -1 
 1: PF----  -1 
 2: PF----  -1 
 3: PF----  -1 
 4: P-O-L-   0 Override Board Name,00A0,Override Manuf,BB-SPIDEV1
root@beaglebone:~# ls -ltar /dev/spidev1.1 
crw-rw---- 1 root spi 153, 0 Aug 25 06:36 /dev/spidev1.1
root@beaglebone:~# uname -a
Linux beaglebone 4.1.13-ti-r35 #1 SMP PREEMPT Thu Dec 3 20:56:01 UTC 2015 armv7l GNU/Linux
root@beaglebone:~# cat /etc/debian_version 
8.5
root@beaglebone:~# 

@pdp7
Copy link
Author

pdp7 commented Aug 25, 2016

Big difference is /dev/spidev1 versus /dev/spidev2

@pdp7
Copy link
Author

pdp7 commented Aug 25, 2016

OK

Linux 4.1.13-ti-r39

BAD

root@beaglebone:# uname -a
Linux beaglebone 4.1.15-ti-r43 #1 SMP PREEMPT Thu Jan 21 22:33:31 UTC 2016 armv7l GNU/Linux
root@beaglebone:
# ls -ltar^C
root@beaglebone:# echo BB-SPIDEV1 > /sys/devices/platform/bone_capemgr/slots
root@beaglebone:
# ls -ltar /dev/spi*
crw-rw---- 1 root spi 153, 0 Aug 25 08:03 /dev/spidev2.0
crw-rw---- 1 root spi 153, 1 Aug 25 08:03 /dev/spidev2.1
root@beaglebone:~#

@pdp7
Copy link
Author

pdp7 commented Aug 26, 2016

OK - Linux beaglebone 4.1.14-bone17

root@beaglebone:~# modprobe fbtft_device busnum=1 verbose=3 name=adafruit18 gpios=dc:48,reset:60
root@beaglebone:~# 
root@beaglebone:~# uname -a
Linux beaglebone 4.1.14-bone17 #1 Thu Dec 10 23:08:42 UTC 2015 armv7l GNU/Linux
[   81.187455] bone_capemgr bone_capemgr: part_number 'BB-SPIDEV1', version 'N/A'
[   81.187515] bone_capemgr bone_capemgr: slot #4: override
[   81.187554] bone_capemgr bone_capemgr: Using override eeprom data at slot 4
[   81.187598] bone_capemgr bone_capemgr: slot #4: 'Override Board Name,00A0,Override Manuf,BB-SPIDEV1'
[   81.225051] bone_capemgr bone_capemgr: slot #4: dtbo 'BB-SPIDEV1-00A0.dtbo' loaded; overlay id #0
[   81.249247] spi spi1.1: not using DMA for McSPI
[   81.249749] spi spi1.0: not using DMA for McSPI
[   95.506228] fbtft: module is from the staging directory, the quality is unknown, you have been warned.
[   95.521180] fbtft_device: module is from the staging directory, the quality is unknown, you have been warned.
[   95.524282] spidev spi1.1: spidev spi1.1 16000kHz 8 bits mode=0x00
[   95.524325] spidev spi1.0: spidev spi1.0 16000kHz 8 bits mode=0x01
[   95.524494] spidev spi1.0: Deleting spi1.0
[   95.535442] spi spi1.0: not using DMA for McSPI
[   95.535847] fbtft_device: GPIOS used by 'adafruit18':
[   95.535870] fbtft_device: 'dc' = GPIO48
[   95.535887] fbtft_device: 'reset' = GPIO60
[   95.535923] spidev spi1.1: spidev spi1.1 16000kHz 8 bits mode=0x00
[   95.535953] spi spi1.0: fb_st7735r spi1.0 32000kHz 8 bits mode=0x00
[   95.571235] fb_st7735r: module is from the staging directory, the quality is unknown, you have been warned.
[   96.503485] Console: switching to colour frame buffer device 16x20
[   96.503859] graphics fb0: fb_st7735r frame buffer, 128x160, 40 KiB video memory, 4 KiB DMA buffer memory, fps=20, spi1.0 at 32 MHz
root@beaglebone:~# 

@pdp7
Copy link
Author

pdp7 commented Aug 26, 2016

BAD Linux 4.4.15-bone11

Linux beaglebone 4.4.15-bone11 #1 Sun Jul 17 13:24:37 UTC 2016 armv7l GNU/Linux

[  448.974803] bone_capemgr bone_capemgr: part_number 'BB-SPIDEV1', version 'N/A'
[  448.974867] bone_capemgr bone_capemgr: slot #4: override
[  448.974906] bone_capemgr bone_capemgr: Using override eeprom data at slot 4
[  448.974949] bone_capemgr bone_capemgr: slot #4: 'Override Board Name,00A0,Override Manuf,BB-SPIDEV1'
[  449.014847] bone_capemgr bone_capemgr: slot #4: dtbo 'BB-SPIDEV1-00A0.dtbo' loaded; overlay id #0
[  476.110087] fbtft: module is from the staging directory, the quality is unknown, you have been warned.
[  476.131578] fbtft_device: module is from the staging directory, the quality is unknown, you have been warned.
[  476.151069] spidev spi2.0: spidev spi2.0 16000kHz 8 bits mode=0x01
[  476.151121] spidev spi2.1: spidev spi2.1 16000kHz 8 bits mode=0x00
[  476.152237] fbtft_device: GPIOS used by 'adafruit18':
[  476.152262] fbtft_device: 'dc' = GPIO48
[  476.152281] fbtft_device: 'reset' = GPIO60
[  476.152314] spidev spi2.0: spidev spi2.0 16000kHz 8 bits mode=0x01
[  476.152343] spidev spi2.1: spidev spi2.1 16000kHz 8 bits mode=0x00
[  476.152372] spi spi1.0: fb_st7735r spi1.0 32000kHz 8 bits mode=0x00
[  476.181251] fb_st7735r: module is from the staging directory, the quality is unknown, you have been warned.
[  477.090483] Console: switching to colour frame buffer device 16x20
[  477.090922] graphics fb0: fb_st7735r frame buffer, 128x160, 40 KiB video memory, 4 KiB DMA buffer memory, fps=20, spi1.0 at 32 MHz
root@beaglebone:~# ls -ltar /dev/spi*
crw-rw---- 1 root spi 153, 0 Aug 26 07:57 /dev/spidev2.0
crw-rw---- 1 root spi 153, 1 Aug 26 07:57 /dev/spidev2.1

@pdp7
Copy link
Author

pdp7 commented Aug 26, 2016

FAIL Linux 4.1.30-bone23

Compiled on my skylake nuc from bb-kernel repo

[   48.963244] bone_capemgr bone_capemgr: part_number 'BB-SPIDEV1', version 'N/A'
[   48.963306] bone_capemgr bone_capemgr: slot #4: override
[   48.963344] bone_capemgr bone_capemgr: Using override eeprom data at slot 4
[   48.963387] bone_capemgr bone_capemgr: slot #4: 'Override Board Name,00A0,Override Manuf,BB-SPIDEV1'
[   49.001690] bone_capemgr bone_capemgr: slot #4: dtbo 'BB-SPIDEV1-00A0.dtbo' loaded; overlay id #0
[   57.838702] fbtft: module is from the staging directory, the quality is unknown, you have been warned.
[   57.857461] fbtft_device: module is from the staging directory, the quality is unknown, you have been warned.
[   57.860648] spidev spi2.0: spidev spi2.0 16000kHz 8 bits mode=0x01
[   57.860694] spidev spi2.1: spidev spi2.1 16000kHz 8 bits mode=0x00
[   57.861505] fbtft_device: GPIOS used by 'adafruit18':
[   57.861532] fbtft_device: 'dc' = GPIO48
[   57.861550] fbtft_device: 'reset' = GPIO60
[   57.861585] spidev spi2.0: spidev spi2.0 16000kHz 8 bits mode=0x01
[   57.861614] spidev spi2.1: spidev spi2.1 16000kHz 8 bits mode=0x00
[   57.861644] spi spi1.0: fb_st7735r spi1.0 32000kHz 8 bits mode=0x00
[   57.895791] fb_st7735r: module is from the staging directory, the quality is unknown, you have been warned.
[   58.830729] Console: switching to colour frame buffer device 16x20
[   58.831023] graphics fb0: fb_st7735r frame buffer, 128x160, 40 KiB video memory, 4 KiB DMA buffer memory, fps=20, spi1.0 at 32 MHz
root@beaglebone:~# uname -a
Linux beaglebone 4.1.30-bone23 #1 Fri Aug 26 03:24:22 CDT 2016 armv7l GNU/Linux

@pdp7
Copy link
Author

pdp7 commented Aug 27, 2016

You don't need to build fbtft as it is included in the 4.1+ kernels.

However, I've noticed a problem wherein the SPI1 ends up as /dev/spidev2.x instead of /dev/spidev1.x. This seems to prevent fbtft from working. I'm still investigating the issue.

Linux 4.1.14-bone17 is OK. Linux 4.4.15-bone11 is not. I'm trying to determine the difference.

@pdp7
Copy link
Author

pdp7 commented Aug 27, 2016

OK: Linux 4.1.14-bone17 compiled by me

root@beaglebone:~# fbi -d /dev/fb0 -T 1 -a BorisTux_w_Logo.png
using "DejaVu Sans Mono-16", pixelsize=16.67 file=/usr/share/fonts/truetype/dejavu/DejaVuSansMono.ttf
root@beaglebone:~# uname -a
Linux beaglebone 4.1.14-bone17 #1 Fri Aug 26 04:14:01 CDT 2016 armv7l GNU/Linux
root@beaglebone:~# modinfo fbtft
filename:       /lib/modules/4.1.14-bone17/kernel/drivers/staging/fbtft/fbtft.ko
license:        GPL
depends:        
staging:        Y
intree:         Y
vermagic:       4.1.14-bone17 mod_unload modversions ARMv7 thumb2 p2v8 
parm:           debug:override device debug level (ulong)
parm:           dma:Use DMA buffer (bool)
root@beaglebone:~# ls -ltar /dev/spi*
crw-rw---- 1 root spi 153, 0 Aug 27 04:43 /dev/spidev1.1
root@beaglebone:~# 

@pdp7
Copy link
Author

pdp7 commented Aug 27, 2016

OK Linux 4.1.14-bone17

Linux beaglebone 4.1.14-bone17 #1 Fri Aug 26 04:14:01 CDT 2016

compiled with my debug printout

root@beaglebone:~# modprobe fbtft_device busnum=1 verbose=3 debug=7 name=adafruit18 gpios=dc:48,reset:60
root@beaglebone:~# dmesg
[  127.276627] fbtft: module is from the staging directory, the quality is unknown, you have been warned.
[  127.297944] fbtft_device: module is from the staging directory, the quality is unknown, you have been warned.
[  127.301111] fbtft_device: fbtft_device.c: call pr_spi_devices()
[  127.307327] spidev spi1.1: spi_device_found spidev spi1.1 16000kHz 8 bits mode=0x00
[  127.307365] spidev spi1.0: spi_device_found spidev spi1.0 16000kHz 8 bits mode=0x01
[  127.307385] fbtft_device: fbtft_device.c: call pr_p_devices: list of 'fb' platform device)
[  127.315898] fbtft_device:  name=list lists all supported displays 
[  127.322142] fbtft_device: fbtft_device.c: custom=0
[  127.327199] fbtft_device: if (displays[i].spi)
[  127.331691] fbtft_device: fbtft_device_spi_device_register(spi);
[  127.337810] fbtft_device: fbtft_device_spi_device_register(): spi=bf8dc0d0
[  127.344790] fbtft_device: fbtft_device_spi_device_register(): master=dcd8a000
[  127.351989] fbtft_device: fbtft_device_spi_device_register(): fbtft_device_spi_delete()
[  127.360107] fbtft_device: fbtft_device_spi_delete()
[  127.365084] fbtft_device: fbtft_device_spi_delete(): bus_find_device_by_name: dev=dcfcbe00
[  127.373457] fbtft_device: fbtft_device_spi_delete(): bus_find_device_by_name: verbose=3
[  127.381576] spidev spi1.0: Deleting spi1.0
[  127.381594] fbtft_device: fbtft_device_spi_delete(): device_del(dev)
[  127.412362] fbtft_device: fbtft_device_spi_device_register(): spi_new_device()
[  127.420291] spi spi1.0: not using DMA for McSPI
[  127.427572] fbtft_device: fbtft_device_spi_device_register(): spi_new_device(): spi_device=dc03d800
[  127.436918] fbtft_device: fbtft_device_spi_device_register(): put_device()
[  127.443949] fbtft_device: fbtft_device_spi_device_register(spi): ret=0
[  127.450561] fbtft_device: found=true; break;
[  127.454929] fbtft_device:  if (verbose && pdata && pdata->gpios
[  127.460931] fbtft_device: GPIOS used by 'adafruit18':
[  127.460951] fbtft_device: 'dc' = GPIO48
[  127.460969] fbtft_device: 'reset' = GPIO60
[  127.461013] spidev spi1.1: spi_device_found spidev spi1.1 16000kHz 8 bits mode=0x00
[  127.461046] spi spi1.0: spi_device_found fb_st7735r spi1.0 32000kHz 8 bits mode=0x00
[  127.476880] fb_st7735r: module is from the staging directory, the quality is unknown, you have been warned.
[  127.479556] fb_st7735r spi1.0: fbtft_gamma_parse_str() str=
[  127.479579] fb_st7735r spi1.0: 02 1c 07 12 37 32 29 2d 29 25 2B 39 00 01 03 10
03 1d 07 06 2E 2C 29 2D 2E 2E 37 3F 00 00 02 10
[  127.479634] fb_st7735r spi1.0: fbtft_request_gpios_match('dc')
[  127.479665] fb_st7735r spi1.0: fbtft_request_gpios: 'dc' = GPIO48
[  127.479676] fb_st7735r spi1.0: fbtft_request_gpios_match('reset')
[  127.479694] fb_st7735r spi1.0: fbtft_request_gpios: 'reset' = GPIO60
[  127.479705] fb_st7735r spi1.0: fbtft_verify_gpios()
[  127.479720] fb_st7735r spi1.0: fbtft_reset()
[  127.599604] fb_st7735r spi1.0: init: write(0x01) 
[  127.599625] fb_st7735r spi1.0: fbtft_write_reg8_bus8: 01
[  127.599640] fb_st7735r spi1.0: fbtft_write_spi(len=1): 01
[  127.615380] fb_st7735r spi1.0: init: mdelay(150)
[  127.765122] fb_st7735r spi1.0: init: write(0x11) 
[  127.765143] fb_st7735r spi1.0: fbtft_write_reg8_bus8: 11
[  127.765162] fb_st7735r spi1.0: fbtft_write_spi(len=1): 11
[  127.769372] fb_st7735r spi1.0: init: mdelay(500)
[  128.268336] fb_st7735r spi1.0: init: write(0xB1) 0x01 0x2C 0x2D 
[  128.268355] fb_st7735r spi1.0: fbtft_write_reg8_bus8: b1 01 2c 2d
[  128.268371] fb_st7735r spi1.0: fbtft_write_spi(len=1): b1
[  128.274709] fb_st7735r spi1.0: fbtft_write_spi(len=3): 01 2c 2d
[  128.274763] fb_st7735r spi1.0: init: write(0xB2) 0x01 0x2C 0x2D 
[  128.274780] fb_st7735r spi1.0: fbtft_write_reg8_bus8: b2 01 2c 2d
[  128.274793] fb_st7735r spi1.0: fbtft_write_spi(len=1): b2
[  128.274824] fb_st7735r spi1.0: fbtft_write_spi(len=3): 01 2c 2d
[  128.274859] fb_st7735r spi1.0: init: write(0xB3) 0x01 0x2C 0x2D 0x01 0x2C 0x2D 
[  128.274872] fb_st7735r spi1.0: fbtft_write_reg8_bus8: b3 01 2c 2d 01 2c 2d
[  128.274884] fb_st7735r spi1.0: fbtft_write_spi(len=1): b3
[  128.274914] fb_st7735r spi1.0: fbtft_write_spi(len=6): 01 2c 2d 01 2c 2d
[  128.274946] fb_st7735r spi1.0: init: write(0xB4) 0x07 
[  128.274958] fb_st7735r spi1.0: fbtft_write_reg8_bus8: b4 07
[  128.274971] fb_st7735r spi1.0: fbtft_write_spi(len=1): b4
[  128.275000] fb_st7735r spi1.0: fbtft_write_spi(len=1): 07
[  128.275030] fb_st7735r spi1.0: init: write(0xC0) 0xA2 0x02 0x84 
[  128.275043] fb_st7735r spi1.0: fbtft_write_reg8_bus8: c0 a2 02 84
[  128.275055] fb_st7735r spi1.0: fbtft_write_spi(len=1): c0
[  128.275084] fb_st7735r spi1.0: fbtft_write_spi(len=3): a2 02 84
[  128.275114] fb_st7735r spi1.0: init: write(0xC1) 0xC5 
[  128.275126] fb_st7735r spi1.0: fbtft_write_reg8_bus8: c1 c5
[  128.275138] fb_st7735r spi1.0: fbtft_write_spi(len=1): c1
[  128.275166] fb_st7735r spi1.0: fbtft_write_spi(len=1): c5
[  128.275196] fb_st7735r spi1.0: init: write(0xC2) 0x0A 0x00 
[  128.275208] fb_st7735r spi1.0: fbtft_write_reg8_bus8: c2 0a 00
[  128.275220] fb_st7735r spi1.0: fbtft_write_spi(len=1): c2
[  128.275249] fb_st7735r spi1.0: fbtft_write_spi(len=2): 0a 00
[  128.275279] fb_st7735r spi1.0: init: write(0xC3) 0x8A 0x2A 
[  128.275291] fb_st7735r spi1.0: fbtft_write_reg8_bus8: c3 8a 2a
[  128.275304] fb_st7735r spi1.0: fbtft_write_spi(len=1): c3
[  128.275332] fb_st7735r spi1.0: fbtft_write_spi(len=2): 8a 2a
[  128.275363] fb_st7735r spi1.0: init: write(0xC4) 0x8A 0xEE 
[  128.275375] fb_st7735r spi1.0: fbtft_write_reg8_bus8: c4 8a ee
[  128.275387] fb_st7735r spi1.0: fbtft_write_spi(len=1): c4
[  128.275416] fb_st7735r spi1.0: fbtft_write_spi(len=2): 8a ee
[  128.275445] fb_st7735r spi1.0: init: write(0xC5) 0x0E 
[  128.275456] fb_st7735r spi1.0: fbtft_write_reg8_bus8: c5 0e
[  128.275469] fb_st7735r spi1.0: fbtft_write_spi(len=1): c5
[  128.275497] fb_st7735r spi1.0: fbtft_write_spi(len=1): 0e
[  128.275525] fb_st7735r spi1.0: init: write(0x20) 
[  128.275536] fb_st7735r spi1.0: fbtft_write_reg8_bus8: 20
[  128.275548] fb_st7735r spi1.0: fbtft_write_spi(len=1): 20
[  128.275577] fb_st7735r spi1.0: init: write(0x3A) 0x05 
[  128.275589] fb_st7735r spi1.0: fbtft_write_reg8_bus8: 3a 05
[  128.275601] fb_st7735r spi1.0: fbtft_write_spi(len=1): 3a
[  128.275630] fb_st7735r spi1.0: fbtft_write_spi(len=1): 05
[  128.275657] fb_st7735r spi1.0: init: write(0x29) 
[  128.275669] fb_st7735r spi1.0: fbtft_write_reg8_bus8: 29
[  128.275681] fb_st7735r spi1.0: fbtft_write_spi(len=1): 29
[  128.275708] fb_st7735r spi1.0: init: mdelay(100)
[  128.375552] fb_st7735r spi1.0: init: write(0x13) 
[  128.375565] fb_st7735r spi1.0: fbtft_write_reg8_bus8: 13
[  128.375577] fb_st7735r spi1.0: fbtft_write_spi(len=1): 13
[  128.435801] fb_st7735r spi1.0: init: mdelay(10)
[  128.445964] fb_st7735r spi1.0: fbtft_write_reg8_bus8: 36 c0
[  128.445986] fb_st7735r spi1.0: fbtft_write_spi(len=1): 36
[  128.449127] fb_st7735r spi1.0: fbtft_write_spi(len=1): c0
[  128.449172] fb_st7735r spi1.0: fbtft_update_display(start_line=0, end_line=159)
[  128.449186] fb_st7735r spi1.0: fbtft_write_reg8_bus8: 2a 00 00 00 7f
[  128.449199] fb_st7735r spi1.0: fbtft_write_spi(len=1): 2a
[  128.449231] fb_st7735r spi1.0: fbtft_write_spi(len=4): 00 00 00 7f
[  128.449261] fb_st7735r spi1.0: fbtft_write_reg8_bus8: 2b 00 00 00 9f
[  128.449275] fb_st7735r spi1.0: fbtft_write_spi(len=1): 2b
[  128.449304] fb_st7735r spi1.0: fbtft_write_spi(len=4): 00 00 00 9f
[  128.449334] fb_st7735r spi1.0: fbtft_write_reg8_bus8: 2c
[  128.449347] fb_st7735r spi1.0: fbtft_write_spi(len=1): 2c
[  128.449377] fb_st7735r spi1.0: fbtft_write_vmem16_bus8(offset=0, len=40960)

Diff:

eewiki.net: [user@localhost:~$ export kernel_version=4.1.14-bone17]
-----------------------------
[pdp7@skylake bb-kernel]$ 
  CHK     include/generated/bounds.h
  CHK     include/generated/asm-offsets.h
  CALL    scripts/checksyscalls.sh
  CHK     include/generated/compile.h
  CHK     kernel/config_data.h
  CC [M]  drivers/staging/fbtft/fbtft_device.o
  Kernel: arch/arm/boot/Image is ready
  Building modules, stage 2.
  Kernel: arch/arm/boot/zImage is ready
  MODPOST 2255 modules
  CC      drivers/staging/fbtft/fbtft_device.mod.o
  LD [M]  drivers/staging/fbtft/fbtft_device.ko
-----------------------------
make -j4 ARCH=arm LOCALVERSION=-bone17 CROSS_COMPILE="/home/pdp7/dev/beagle/bb-kernel/dl/gcc-linaro-4.9-2015.05-x86_64_arm-linux-gnueabihf/bin/arm-linux-gnueabihf-" dtbs
-----------------------------
  CHK     include/config/kernel.release
  CHK     include/generated/uapi/linux/version.h
  CHK     include/generated/utsrelease.h
make[1]: 'include/generated/mach-types.h' is up to date.
  CHK     include/generated/bounds.h
  CHK     include/generated/asm-offsets.h
  CALL    scripts/checksyscalls.sh
-----------------------------
‘arch/arm/boot/zImage’ -> ‘/home/pdp7/dev/beagle/bb-kernel/deploy/4.1.14-bone17.zImage’
‘.config’ -> ‘/home/pdp7/dev/beagle/bb-kernel/deploy/config-4.1.14-bone17’
-rwxrwxr-x. 1 pdp7 pdp7 6.6M leq 27 01:02 /home/pdp7/dev/beagle/bb-kernel/deploy/4.1.14-bone17.zImage
-----------------------------
Building modules archive...
Compressing 4.1.14-bone17-modules.tar.gz...
-rw-rw-r--. 1 pdp7 pdp7 20M leq 27 01:02 /home/pdp7/dev/beagle/bb-kernel/deploy/4.1.14-bone17-modules.tar.gz
-----------------------------
Building firmware archive...
Compressing 4.1.14-bone17-firmware.tar.gz...
-rw-rw-r--. 1 pdp7 pdp7 1.2M leq 27 01:02 /home/pdp7/dev/beagle/bb-kernel/deploy/4.1.14-bone17-firmware.tar.gz
-----------------------------
Building dtbs archive...
scripts/Makefile.dtbinst:42: target 'am335x-boneblack-overlay.dtb' given more than once in the same rule
Compressing 4.1.14-bone17-dtbs.tar.gz...
-rw-rw-r--. 1 pdp7 pdp7 257K leq 27 01:02 /home/pdp7/dev/beagle/bb-kernel/deploy/4.1.14-bone17-dtbs.tar.gz
-----------------------------
Script Complete
eewiki.net: [user@localhost:~$ export kernel_version=4.1.14-bone17]
-----------------------------
[pdp7@skylake bb-kernel]$ git diff
[pdp7@skylake bb-kernel]$ cd KERNEL/
[pdp7@skylake KERNEL]$ git diff
diff --git a/drivers/staging/fbtft/fbtft_device.c b/drivers/staging/fbtft/fbtft_device.c
index 071f79b..cf14b3d 100644
--- a/drivers/staging/fbtft/fbtft_device.c
+++ b/drivers/staging/fbtft/fbtft_device.c
@@ -1289,7 +1289,7 @@ static int spi_device_found(struct device *dev, void *data)
 {
        struct spi_device *spi = container_of(dev, struct spi_device, dev);

-       dev_info(dev, "%s %s %dkHz %d bits mode=0x%02X\n", spi->modalias,
+       dev_info(dev, "spi_device_found %s %s %dkHz %d bits mode=0x%02X\n", spi->modalias,
                 dev_name(dev), spi->max_speed_hz / 1000, spi->bits_per_word,
                 spi->mode);

@@ -1298,8 +1298,9 @@ static int spi_device_found(struct device *dev, void *data)

 static void pr_spi_devices(void)
 {
-       pr_debug("SPI devices registered:\n");
+       pr_debug("pr_spi_devices: SPI devices registered:\n");
        bus_for_each_dev(&spi_bus_type, NULL, NULL, spi_device_found);
+       pr_debug("pr_spi_devices: return\n");
 }

 static int p_device_found(struct device *dev, void *data)
@@ -1325,13 +1326,15 @@ static void fbtft_device_spi_delete(struct spi_master *master, unsigned cs)
 {
        struct device *dev;
        char str[32];
-
+    pr_err("fbtft_device_spi_delete()\n");
        snprintf(str, sizeof(str), "%s.%u", dev_name(&master->dev), cs);

        dev = bus_find_device_by_name(&spi_bus_type, NULL, str);
+    pr_err("fbtft_device_spi_delete(): bus_find_device_by_name: dev=%p\n", dev);
+    pr_err("fbtft_device_spi_delete(): bus_find_device_by_name: verbose=%d\n", verbose);
        if (dev) {
-               if (verbose)
-                       dev_info(dev, "Deleting %s\n", str);
+               dev_info(dev, "Deleting %s\n", str);
+        pr_err("fbtft_device_spi_delete(): device_del(dev)\n");
                device_del(dev);
        }
 }
@@ -1340,15 +1343,21 @@ static int fbtft_device_spi_device_register(struct spi_board_info *spi)
 {
        struct spi_master *master;

+    pr_err("fbtft_device_spi_device_register(): spi=%p\n", spi);
        master = spi_busnum_to_master(spi->bus_num);
+    pr_err("fbtft_device_spi_device_register(): master=%p\n", master);
        if (!master) {
                pr_err("spi_busnum_to_master(%d) returned NULL\n",
                       spi->bus_num);
                return -EINVAL;
        }
        /* make sure it's available */
+    pr_err("fbtft_device_spi_device_register(): fbtft_device_spi_delete()\n");
        fbtft_device_spi_delete(master, spi->chip_select);
+    pr_err("fbtft_device_spi_device_register(): spi_new_device()\n");
        spi_device = spi_new_device(master, spi);
+    pr_err("fbtft_device_spi_device_register(): spi_new_device(): spi_device=%p\n", spi_device);
+    pr_err("fbtft_device_spi_device_register(): put_device()\n");
        put_device(&master->dev);
        if (!spi_device) {
                dev_err(&master->dev, "spi_new_device() returned NULL\n");
@@ -1359,6 +1368,9 @@ static int fbtft_device_spi_device_register(struct spi_board_info *spi)
 #else
 static int fbtft_device_spi_device_register(struct spi_board_info *spi)
 {
+    pr_err("fbtft_device_spi_device_register(): MODULE not defined\n");
+    pr_err("fbtft_device_spi_device_register(): spi=%p\n", spi);
+    pr_err("fbtft_device_spi_device_register(): return spi_register_board_info(spi, 1);\n");
        return spi_register_board_info(spi, 1);
 }
 #endif
@@ -1421,13 +1433,13 @@ static int __init fbtft_device_init(void)
        if (fbtft_device_param_gpios[0].name[0])
                gpio = fbtft_device_param_gpios;

-       if (verbose > 2)
-               pr_spi_devices(); /* print list of registered SPI devices */
+    pr_err("fbtft_device.c: call pr_spi_devices()\n");
+       pr_spi_devices(); /* print list of registered SPI devices */

-       if (verbose > 2)
-               pr_p_devices(); /* print list of 'fb' platform devices */
+    pr_err("fbtft_device.c: call pr_p_devices: list of 'fb' platform device)\n");
+       pr_p_devices(); /* print list of 'fb' platform devices */

-       pr_debug("name='%s', busnum=%d, cs=%d\n", name, busnum, cs);
+       pr_debug("fbtft_device.c: name='%s', busnum=%d, cs=%d\n", name, busnum, cs);

        if (rotate > 0 && rotate < 4) {
                rotate = (4 - rotate) * 90;
@@ -1441,6 +1453,7 @@ static int __init fbtft_device_init(void)
        }

        /* name=list lists all supported displays */
+       pr_err(" name=list lists all supported displays \n");
        if (strncmp(name, "list", FBTFT_GPIO_NAME_SIZE) == 0) {
                pr_info("Supported displays:\n");

@@ -1449,6 +1462,7 @@ static int __init fbtft_device_init(void)
                return -ECANCELED;
        }

+       pr_err("fbtft_device.c: custom=%d\n", custom);
        if (custom) {
                i = ARRAY_SIZE(displays) - 1;
                displays[i].name = name;
@@ -1505,20 +1519,26 @@ static int __init fbtft_device_init(void)
                                pdata->display.backlight = 1;
                        }

+                       pr_err("if (displays[i].spi)\n");
                        if (displays[i].spi) {
+                           pr_err("fbtft_device_spi_device_register(spi);\n");
                                ret = fbtft_device_spi_device_register(spi);
+                           pr_err("fbtft_device_spi_device_register(spi): ret=%d\n", ret);
                                if (ret) {
                                        pr_err("failed to register SPI device\n");
                                        return ret;
                                }
                        } else {
+                           pr_err("platform_device_register()\n");
                                ret = platform_device_register(p_device);
+                           pr_err("platform_device_register(): ret=%d\n", ret);
                                if (ret < 0) {
                                        pr_err("platform_device_register() returned %d\n",
                                               ret);
                                        return ret;
                                }
                        }
+                       pr_err("found=true; break;\n");
                        found = true;
                        break;
                }
@@ -1528,8 +1548,9 @@ static int __init fbtft_device_init(void)
                pr_err("display not supported: '%s'\n", name);
                return -EINVAL;
        }
-
-       if (verbose && pdata && pdata->gpios) {
+       
+    pr_err(" if (verbose && pdata && pdata->gpios\n");
+    if (verbose && pdata && pdata->gpios) {
                gpio = pdata->gpios;
                pr_info("GPIOS used by '%s':\n", name);
                found = false;

@pdp7
Copy link
Author

pdp7 commented Aug 27, 2016

OK - Linux 4.1.15-bone17 (compiled by me)

root@beaglebone:~# ls -latr /dev/spidev1.1 
crw-rw---- 1 root spi 153, 0 Aug 27 07:01 /dev/spidev1.1
root@beaglebone:~# uname -a
Linux beaglebone 4.1.15-bone17 #1 Sat Aug 27 01:54:43 CDT 2016 armv7l GNU/Linux
root@beaglebone:~# dmesg|head
[  160.339594] fbtft: module is from the staging directory, the quality is unknown, you have been warned.
[  160.359156] fbtft_device: module is from the staging directory, the quality is unknown, you have been warned.
[  160.364319] spidev spi1.1: spidev spi1.1 16000kHz 8 bits mode=0x00
[  160.364367] spidev spi1.0: spidev spi1.0 16000kHz 8 bits mode=0x01
[  160.364554] spidev spi1.0: Deleting spi1.0
[  160.367839] spi spi1.0: not using DMA for McSPI
[  160.368244] fbtft_device: GPIOS used by 'adafruit18':
[  160.368266] fbtft_device: 'dc' = GPIO48
[  160.368284] fbtft_device: 'reset' = GPIO60
[  160.368319] spidev spi1.1: spidev spi1.1 16000kHz 8 bits mode=0x00
root@beaglebone:~# 

@pdp7
Copy link
Author

pdp7 commented Aug 27, 2016

spidev spi2.0 vs. spi1.0: fb_st7735r

Linux beaglebone 4.4.16-ti-r38 #1 SMP Wed Aug 3 17:12:46 UTC 2016 armv7l GNU/Linux

[   47.551857] bone_capemgr bone_capemgr: slot #4: override
[   47.551873] bone_capemgr bone_capemgr: Using override eeprom data at slot 4
[   47.551889] bone_capemgr bone_capemgr: slot #4: 'Override Board Name,00A0,Override Manuf,BB-SPIDEV1'
[   47.565578] bone_capemgr bone_capemgr: slot #4: dtbo 'BB-SPIDEV1-00A0.dtbo' loaded; overlay id #0
[   56.770723] fbtft: module is from the staging directory, the quality is unknown, you have been warned.
[   56.788951] fbtft_device: module is from the staging directory, the quality is unknown, you have been warned.
[   56.797210] spidev spi2.0: spidev spi2.0 16000kHz 8 bits mode=0x01
[   56.797271] spidev spi2.1: spidev spi2.1 16000kHz 8 bits mode=0x00
[   56.798653] fbtft_device: GPIOS used by 'adafruit18':
[   56.798684] fbtft_device: 'dc' = GPIO48
[   56.798706] fbtft_device: 'reset' = GPIO60
[   56.798745] spidev spi2.0: spidev spi2.0 16000kHz 8 bits mode=0x01
[   56.798779] spidev spi2.1: spidev spi2.1 16000kHz 8 bits mode=0x00
[   56.798813] spi spi1.0: fb_st7735r spi1.0 32000kHz 8 bits mode=0x00
[   56.929495] fb_st7735r: module is from the staging directory, the quality is unknown, you have been warned.
[   57.868115] Console: switching to colour frame buffer device 16x20
[   57.868430] graphics fb0: fb_st7735r frame buffer, 128x160, 40 KiB video memory, 4 KiB DMA buffer memory, fps=20, spi1.0 at 32 MHz

@pdp7
Copy link
Author

pdp7 commented Aug 27, 2016

Bad linux-image-4.1.29-bone22 dpkg

root@beaglebone:~# uname -a
Linux beaglebone 4.1.29-bone22 #1 Fri Aug 5 10:18:54 UTC 2016 armv7l GNU/Linux
root@beaglebone:~# ls -ltar /dev/spi^C
root@beaglebone:~# echo BB-SPIDEV1 > /sys/devices/platform/bone_capemgr/slots
root@beaglebone:~# ls -ltar /dev/spidev2.^C
root@beaglebone:~# 

@pdp7
Copy link
Author

pdp7 commented Aug 27, 2016

MISSING Linux 4.2.5-bone2

root@beaglebone:~# ls -ltar /dev/spidev1.*
crw-rw---- 1 root spi 153, 0 Aug 27 08:24 /dev/spidev1.1
crw-rw---- 1 root spi 153, 1 Aug 27 08:24 /dev/spidev1.0
root@beaglebone:~# modprobe fbtft_device busnum=1 name=adafruit18 verbose=3 gpios=dc:48,reset:60
modprobe: FATAL: Module fbtft_device not found.
root@beaglebone:~# uname -a
Linux beaglebone 4.2.5-bone2 #1 Wed Oct 28 22:54:54 UTC 2015 armv7l GNU/Linux
root@beaglebone:~# 

@pdp7
Copy link
Author

pdp7 commented Aug 27, 2016

BAD Linux 4.4.19-bone13

root@beaglebone:~# ls -ltar /dev/spidev2.*
crw-rw---- 1 root spi 153, 1 Aug 27 08:35 /dev/spidev2.1
crw-rw---- 1 root spi 153, 0 Aug 27 08:35 /dev/spidev2.0
root@beaglebone:~# uname -a
Linux beaglebone 4.4.19-bone13 #1 Sat Aug 27 02:33:52 CDT 2016 armv7l GNU/Linux
root@beaglebone:~# 
root@beaglebone:~# modprobe fbtft_device busnum=1 verbose=3 name=adafruit18 gpios=dc:48,reset:60
root@beaglebone:~# dmesg
[   87.378178] bone_capemgr bone_capemgr: part_number 'BB-SPIDEV1', version 'N/A'
[   87.378242] bone_capemgr bone_capemgr: slot #4: override
[   87.378281] bone_capemgr bone_capemgr: Using override eeprom data at slot 4
[   87.378322] bone_capemgr bone_capemgr: slot #4: 'Override Board Name,00A0,Override Manuf,BB-SPIDEV1'
[   87.407002] bone_capemgr bone_capemgr: slot #4: dtbo 'BB-SPIDEV1-00A0.dtbo' loaded; overlay id #0
[  126.593159] fbtft: module is from the staging directory, the quality is unknown, you have been warned.
[  126.615857] fbtft_device: module is from the staging directory, the quality is unknown, you have been warned.
[  126.621292] spidev spi2.0: spidev spi2.0 16000kHz 8 bits mode=0x01
[  126.621340] spidev spi2.1: spidev spi2.1 16000kHz 8 bits mode=0x00
[  126.622456] fbtft_device: GPIOS used by 'adafruit18':
[  126.622480] fbtft_device: 'dc' = GPIO48
[  126.622498] fbtft_device: 'reset' = GPIO60
[  126.622533] spidev spi2.0: spidev spi2.0 16000kHz 8 bits mode=0x01
[  126.622565] spidev spi2.1: spidev spi2.1 16000kHz 8 bits mode=0x00
[  126.622594] spi spi1.0: fb_st7735r spi1.0 32000kHz 8 bits mode=0x00
[  126.656152] fb_st7735r: module is from the staging directory, the quality is unknown, you have been warned.
[  127.588015] Console: switching to colour frame buffer device 16x20
[  127.588306] graphics fb0: fb_st7735r frame buffer, 128x160, 40 KiB video memory, 4 KiB DMA buffer memory, fps=20, spi1.0 at 32 MHz
root@beaglebone:~# 

@pdp7
Copy link
Author

pdp7 commented Aug 27, 2016

BAD - Linux 4.4.19-bone13

Linux beaglebone 4.4.19-bone13 #2 Sat Aug 27 03:47:23 CDT 2016 armv7l GNU/Linux

[   37.111311] bone_capemgr bone_capemgr: part_number 'BB-SPIDEV1', version 'N/A'
[   37.111377] bone_capemgr bone_capemgr: slot #4: override
[   37.111416] bone_capemgr bone_capemgr: Using override eeprom data at slot 4
[   37.111458] bone_capemgr bone_capemgr: slot #4: 'Override Board Name,00A0,Override Manuf,BB-SPIDEV1'
[   37.154911] bone_capemgr bone_capemgr: slot #4: dtbo 'BB-SPIDEV1-00A0.dtbo' loaded; overlay id #0
root@beaglebone:~# modprobe fbtft_device busnum=1 verbose=3 name=adafruit18 gpios=dc:48,reset:60
root@beaglebone:~# dmesg
[   49.937106] fbtft: module is from the staging directory, the quality is unknown, you have been warned.
[   49.959818] fbtft_device: module is from the staging directory, the quality is unknown, you have been warned.
[   49.963152] spidev spi2.0: spidev spi2.0 16000kHz 8 bits mode=0x01
[   49.963197] spidev spi2.1: spidev spi2.1 16000kHz 8 bits mode=0x00
[   49.963363] fbtft_device: fbtft_device_spi_delete(): spi_busnum_to_master()
[   49.970595] fbtft_device: fbtft_device_spi_delete(): spi->bus_num=1
[   49.976990] fbtft_device: fbtft_device_spi_delete(): master=ddf65c00
[   49.983403] fbtft_device: fbtft_device_spi_delete()
[   49.988393] fbtft_device: fbtft_device_spi_delete(): dev=  (null)
[   49.994582] fbtft_device: fbtft_device_spi_delete(): fbtft_device_spi_delete()
[   50.018932] fbtft_device: fbtft_device_spi_delete(): spi_new_device(): spi_device=dba05800
[   50.027422] fbtft_device: fbtft_device_spi_delete(): put_device()
[   50.033936] fbtft_device: GPIOS used by 'adafruit18':
[   50.033962] fbtft_device: 'dc' = GPIO48
[   50.033980] fbtft_device: 'reset' = GPIO60
[   50.034026] spidev spi2.0: spidev spi2.0 16000kHz 8 bits mode=0x01
[   50.034058] spidev spi2.1: spidev spi2.1 16000kHz 8 bits mode=0x00
[   50.034089] spi spi1.0: fb_st7735r spi1.0 32000kHz 8 bits mode=0x00
[   50.049859] fb_st7735r: module is from the staging directory, the quality is unknown, you have been warned.
[   50.980674] Console: switching to colour frame buffer device 16x20
[   50.981022] graphics fb0: fb_st7735r frame buffer, 128x160, 40 KiB video memory, 4 KiB DMA buffer memory, fps=20, spi1.0 at 32 MHz
root@beaglebone:~# uanme -a
-bash: uanme: command not found
root@beaglebone:~# uname -a
Linux beaglebone 4.4.19-bone13 #2 Sat Aug 27 03:47:23 CDT 2016 armv7l GNU/Linux
root@beaglebone:~# cat /sys/devices/platform/bone_capemgr/slots
 0: PF----  -1 
 1: PF----  -1 
 2: PF----  -1 
 3: PF----  -1 
 4: P-O-L-   0 Override Board Name,00A0,Override Manuf,BB-SPIDEV1
root@beaglebone:~# 
[   49.963363] fbtft_device: fbtft_device_spi_delete(): spi_busnum_to_master()
[   49.970595] fbtft_device: fbtft_device_spi_delete(): spi->bus_num=1
[   49.976990] fbtft_device: fbtft_device_spi_delete(): master=ddf65c00
[   49.983403] fbtft_device: fbtft_device_spi_delete()
[   49.988393] fbtft_device: fbtft_device_spi_delete(): dev=  (null)
[   49.994582] fbtft_device: fbtft_device_spi_delete(): fbtft_device_spi_delete()
[   50.018932] fbtft_device: fbtft_device_spi_delete(): spi_new_device(): spi_device=dba05800
[   50.027422] fbtft_device: fbtft_device_spi_delete(): put_device()

@pdp7
Copy link
Author

pdp7 commented Aug 27, 2016

BAD Linux beaglebone 4.4.19-bone13

root@beaglebone:~# dmesg
root@beaglebone:~# uname -a
Linux beaglebone 4.4.19-bone13 #3 Sat Aug 27 04:02:56 CDT 2016 armv7l GNU/Linux
root@beaglebone:~# modprobe fbtft_device busnum=1 verbose=3 name=adafruit18 gpios=dc:48,reset:60
root@beaglebone:~# dmesg
[   69.288269] fbtft: module is from the staging directory, the quality is unknown, you have been warned.
[   69.329260] fbtft_device: module is from the staging directory, the quality is unknown, you have been warned.
[   69.336936] spidev spi2.0: spidev spi2.0 16000kHz 8 bits mode=0x01
[   69.336988] spidev spi2.1: spidev spi2.1 16000kHz 8 bits mode=0x00
[   69.337158] fbtft_device: fbtft_device_spi_device_register(): spi_busnum_to_master()
[   69.345125] fbtft_device: fbtft_device_spi_device_register(): spi->bus_num=1
[   69.352251] fbtft_device: fbtft_device_spi_device_register(): master=dddf1000
[   69.359493] fbtft_device: fbtft_device_spi_device_register(): fbtft_device_spi_delete()
[   69.367623] fbtft_device: fbtft_device_spi_delete()
[   69.372584] fbtft_device: fbtft_device_spi_delete(): str=spi1.0
[   69.378600] fbtft_device: fbtft_device_spi_delete(): dev_name(&master->dev)=spi1
[   69.386090] fbtft_device: fbtft_device_spi_delete(): cs=0
[   69.391548] fbtft_device: fbtft_device_spi_delete(): dev=  (null)
[   69.413149] fbtft_device: fbtft_device_spi_device_register(): spi_new_device(): spi_device=db84b000
[   69.422364] fbtft_device: fbtft_device_spi_device_register(): put_device()
[   69.429327] fbtft_device: GPIOS used by 'adafruit18':
[   69.429337] fbtft_device: 'dc' = GPIO48
[   69.429347] fbtft_device: 'reset' = GPIO60
[   69.429371] spidev spi2.0: spidev spi2.0 16000kHz 8 bits mode=0x01
[   69.429389] spidev spi2.1: spidev spi2.1 16000kHz 8 bits mode=0x00
[   69.429404] spi spi1.0: fb_st7735r spi1.0 32000kHz 8 bits mode=0x00
[   69.796607] fb_st7735r: module is from the staging directory, the quality is unknown, you have been warned.
[   70.731060] Console: switching to colour frame buffer device 16x20
[   70.731876] graphics fb0: fb_st7735r frame buffer, 128x160, 40 KiB video memory, 4 KiB DMA buffer memory, fps=20, spi1.0 at 32 MHz
root@beaglebone:~# 

@pdp7
Copy link
Author

pdp7 commented Aug 27, 2016

root@beaglebone:~# modprobe fbtft_device busnum=2 verbose=3 name=adafruit18 gpios=dc:48,reset:60
[   82.937553] fbtft_device: module is from the staging directory, the quality is unknown, you have been warned.
[   82.948130] spidev spi2.0: spidev spi2.0 16000kHz 8 bits mode=0x01
[   82.948181] spidev spi2.1: spidev spi2.1 16000kHz 8 bits mode=0x00
[   82.948351] fbtft_device: fbtft_device_spi_device_register(): spi_busnum_to_master()
[   82.956322] fbtft_device: fbtft_device_spi_device_register(): spi->bus_num=2
[   82.963448] fbtft_device: fbtft_device_spi_device_register(): master=ddec4000
[   82.970686] fbtft_device: fbtft_device_spi_device_register(): fbtft_device_spi_delete()
[   82.978789] fbtft_device: fbtft_device_spi_delete()
[   82.983718] fbtft_device: fbtft_device_spi_delete(): str=spi2.0
[   82.989723] fbtft_device: fbtft_device_spi_delete(): dev_name(&master->dev)=spi2
[   82.997218] fbtft_device: fbtft_device_spi_delete(): cs=0
[   83.002707] fbtft_device: fbtft_device_spi_delete(): dev=dbac4800
[   83.008903] spidev spi2.0: Deleting spi2.0
[   83.008923] fbtft_device: fbtft_device_spi_delete(): device_del(dbac4800)
[   83.039154] fbtft_device: fbtft_device_spi_device_register(): spi_new_device(): spi_device=dba92400
[   83.048415] fbtft_device: fbtft_device_spi_device_register(): put_device()
[   83.055360] fbtft_device: GPIOS used by 'adafruit18':
[   83.055379] fbtft_device: 'dc' = GPIO48
[   83.055397] fbtft_device: 'reset' = GPIO60
[   83.055438] spidev spi2.1: spidev spi2.1 16000kHz 8 bits mode=0x00
[   83.055470] spi spi2.0: fb_st7735r spi2.0 32000kHz 8 bits mode=0x00
[   83.078042] fb_st7735r: module is from the staging directory, the quality is unknown, you have been warned.
[   84.022699] Console: switching to colour frame buffer device 16x20
[   84.023044] graphics fb0: fb_st7735r frame buffer, 128x160, 40 KiB video memory, 4 KiB DMA buffer memory, fps=20, spi2.0 at 32 MHz

@pdp7
Copy link
Author

pdp7 commented Aug 27, 2016

Switched wiring to SPI0 pins

[   28.344278] bone_capemgr bone_capemgr: part_number 'BB-SPIDEV1', version 'N/A'
[   28.344318] bone_capemgr bone_capemgr: slot #4: override
[   28.344340] bone_capemgr bone_capemgr: Using override eeprom data at slot 4
[   28.344362] bone_capemgr bone_capemgr: slot #4: 'Override Board Name,00A0,Override Manuf,BB-SPIDEV1'
[   28.392895] bone_capemgr bone_capemgr: slot #4: dtbo 'BB-SPIDEV1-00A0.dtbo' loaded; overlay id #0
[   32.105119] bone_capemgr bone_capemgr: part_number 'BB-SPIDEV0', version 'N/A'
[   32.105183] bone_capemgr bone_capemgr: slot #5: override
[   32.105283] bone_capemgr bone_capemgr: Using override eeprom data at slot 5
[   32.105326] bone_capemgr bone_capemgr: slot #5: 'Override Board Name,00A0,Override Manuf,BB-SPIDEV0'
[   32.144073] bone_capemgr bone_capemgr: slot #5: dtbo 'BB-SPIDEV0-00A0.dtbo' loaded; overlay id #1
[   63.255311] fbtft: module is from the staging directory, the quality is unknown, you have been warned.
[   63.273305] fbtft_device: module is from the staging directory, the quality is unknown, you have been warned.
[   63.278629] spidev spi2.0: spidev spi2.0 16000kHz 8 bits mode=0x01
[   63.278681] spidev spi2.1: spidev spi2.1 16000kHz 8 bits mode=0x00
[   63.278713] spidev spi1.0: spidev spi1.0 16000kHz 8 bits mode=0x01
[   63.278745] spidev spi1.1: spidev spi1.1 16000kHz 8 bits mode=0x00
[   63.278908] fbtft_device: fbtft_device_spi_device_register(): spi_busnum_to_master()
[   63.286906] fbtft_device: fbtft_device_spi_device_register(): spi->bus_num=0
[   63.294066] fbtft_device: fbtft_device_spi_device_register(): master=  (null)
[   63.301268] fbtft_device: spi_busnum_to_master(0) returned NULL
[   63.307276] fbtft_device: failed to register SPI device
[   88.225266] fbtft_device: module is from the staging directory, the quality is unknown, you have been warned.
[   88.239890] spidev spi2.0: spidev spi2.0 16000kHz 8 bits mode=0x01
[   88.239941] spidev spi2.1: spidev spi2.1 16000kHz 8 bits mode=0x00
[   88.239972] spidev spi1.0: spidev spi1.0 16000kHz 8 bits mode=0x01
[   88.240003] spidev spi1.1: spidev spi1.1 16000kHz 8 bits mode=0x00
[   88.240171] fbtft_device: fbtft_device_spi_device_register(): spi_busnum_to_master()
[   88.248005] fbtft_device: fbtft_device_spi_device_register(): spi->bus_num=1
[   88.255408] fbtft_device: fbtft_device_spi_device_register(): master=ddee7000
[   88.262698] fbtft_device: fbtft_device_spi_device_register(): fbtft_device_spi_delete()
[   88.270813] fbtft_device: fbtft_device_spi_delete()
[   88.275743] fbtft_device: fbtft_device_spi_delete(): str=spi1.0
[   88.281749] fbtft_device: fbtft_device_spi_delete(): dev_name(&master->dev)=spi1
[   88.289211] fbtft_device: fbtft_device_spi_delete(): cs=0
[   88.294699] fbtft_device: fbtft_device_spi_delete(): dev=ddfbf800
[   88.300888] spidev spi1.0: Deleting spi1.0
[   88.300908] fbtft_device: fbtft_device_spi_delete(): device_del(ddfbf800)
[   88.332428] fbtft_device: fbtft_device_spi_device_register(): spi_new_device(): spi_device=dddf5c00
[   88.341758] fbtft_device: fbtft_device_spi_device_register(): put_device()
[   88.348727] fbtft_device: GPIOS used by 'adafruit18':
[   88.348746] fbtft_device: 'dc' = GPIO48
[   88.348763] fbtft_device: 'reset' = GPIO60
[   88.348805] spidev spi2.0: spidev spi2.0 16000kHz 8 bits mode=0x01
[   88.348836] spidev spi2.1: spidev spi2.1 16000kHz 8 bits mode=0x00
[   88.348866] spidev spi1.1: spidev spi1.1 16000kHz 8 bits mode=0x00
[   88.348896] spi spi1.0: fb_st7735r spi1.0 32000kHz 8 bits mode=0x00
[   88.372885] fb_st7735r: module is from the staging directory, the quality is unknown, you have been warned.
[   89.309203] Console: switching to colour frame buffer device 16x20
[   89.309556] graphics fb0: fb_st7735r frame buffer, 128x160, 40 KiB video memory, 4 KiB DMA buffer memory, fps=20, spi1.0 at 32 MHz
root@beaglebone:~# 
root@beaglebone:~# vi /boot/uEnv.txt 
root@beaglebone:~# reboot

@pdp7
Copy link
Author

pdp7 commented Aug 27, 2016

pdp7@lappyimx6:~$ ssh root@192.168.10.158\
> 
Debian GNU/Linux 8

BeagleBoard.org Debian Image 2015-12-07

Support/FAQ: http://elinux.org/Beagleboard:BeagleBoneBlack_Debian

default username:password is [debian:temppwd]

Last login: Sat Aug 27 09:24:12 2016
root@beaglebone:~# uname -a
Linux beaglebone 4.1.14-bone17 #1 Fri Aug 26 04:14:01 CDT 2016 armv7l GNU/Linux
root@beaglebone:~# echo BB-SPIDEV0 > /sys/devices/platform/bone_capemgr/slots
root@beaglebone:~# ls -ltar /dev/spidev*  
crw-rw---- 1 root spi 153, 0 Aug 27 09:24 /dev/spidev1.1
crw-rw---- 1 root spi 153, 1 Aug 27 09:24 /dev/spidev1.0
root@beaglebone:~# 

@pdp7
Copy link
Author

pdp7 commented Aug 27, 2016

OK: SPI0 pins: Linux 4.1.14-bone17

root@beaglebone:~# uname -a 
Linux beaglebone 4.1.14-bone17 #1 Fri Aug 26 04:14:01 CDT 2016 armv7l GNU/Linux
root@beaglebone:~# echo BB-SPIDEV0 > /sys/devices/platform/bone_capemgr/slots
root@beaglebone:~# ls -ltar /dev/spi*
crw-rw---- 1 root spi 153, 0 Aug 27 09:26 /dev/spidev1.1
crw-rw---- 1 root spi 153, 1 Aug 27 09:26 /dev/spidev1.0
root@beaglebone:~# modprobe fbtft_device busnum=1 verbose=3 name=adafruit18 gpios=dc:48,reset:60
root@beaglebone:~# dmesg
[   40.868943] bone_capemgr bone_capemgr: part_number 'BB-SPIDEV0', version 'N/A'
[   40.869004] bone_capemgr bone_capemgr: slot #4: override
[   40.869042] bone_capemgr bone_capemgr: Using override eeprom data at slot 4
[   40.869082] bone_capemgr bone_capemgr: slot #4: 'Override Board Name,00A0,Override Manuf,BB-SPIDEV0'
[   40.899612] bone_capemgr bone_capemgr: slot #4: dtbo 'BB-SPIDEV0-00A0.dtbo' loaded; overlay id #0
[   40.934299] spi spi1.1: not using DMA for McSPI
[   40.934792] spi spi1.0: not using DMA for McSPI
[   54.960586] fbtft: module is from the staging directory, the quality is unknown, you have been warned.
[   54.975225] fbtft_device: module is from the staging directory, the quality is unknown, you have been warned.
[   54.983907] fbtft_device: fbtft_device.c: call pr_spi_devices()
[   54.990062] spidev spi1.1: spi_device_found spidev spi1.1 16000kHz 8 bits mode=0x00
[   54.990099] spidev spi1.0: spi_device_found spidev spi1.0 16000kHz 8 bits mode=0x01
[   54.990119] fbtft_device: fbtft_device.c: call pr_p_devices: list of 'fb' platform device)
[   54.998659] fbtft_device:  name=list lists all supported displays 
[   55.004904] fbtft_device: fbtft_device.c: custom=0
[   55.009787] fbtft_device: if (displays[i].spi)
[   55.014274] fbtft_device: fbtft_device_spi_device_register(spi);
[   55.020372] fbtft_device: fbtft_device_spi_device_register(): spi=bf8d80d0
[   55.027315] fbtft_device: fbtft_device_spi_device_register(): master=dc98b400
[   55.034548] fbtft_device: fbtft_device_spi_device_register(): fbtft_device_spi_delete()
[   55.042653] fbtft_device: fbtft_device_spi_delete()
[   55.047590] fbtft_device: fbtft_device_spi_delete(): bus_find_device_by_name: dev=dcfc1e00
[   55.055968] fbtft_device: fbtft_device_spi_delete(): bus_find_device_by_name: verbose=3
[   55.064084] spidev spi1.0: Deleting spi1.0
[   55.064102] fbtft_device: fbtft_device_spi_delete(): device_del(dev)
[   55.093817] fbtft_device: fbtft_device_spi_device_register(): spi_new_device()
[   55.101750] spi spi1.0: not using DMA for McSPI
[   55.111737] fbtft_device: fbtft_device_spi_device_register(): spi_new_device(): spi_device=dcf94a00
[   55.121066] fbtft_device: fbtft_device_spi_device_register(): put_device()
[   55.128092] fbtft_device: fbtft_device_spi_device_register(spi): ret=0
[   55.134703] fbtft_device: found=true; break;
[   55.139081] fbtft_device:  if (verbose && pdata && pdata->gpios
[   55.145085] fbtft_device: GPIOS used by 'adafruit18':
[   55.145103] fbtft_device: 'dc' = GPIO48
[   55.145120] fbtft_device: 'reset' = GPIO60
[   55.145164] spidev spi1.1: spi_device_found spidev spi1.1 16000kHz 8 bits mode=0x00
[   55.145197] spi spi1.0: spi_device_found fb_st7735r spi1.0 32000kHz 8 bits mode=0x00
[   55.154968] fb_st7735r: module is from the staging directory, the quality is unknown, you have been warned.
[   56.099773] Console: switching to colour frame buffer device 16x20
[   56.100062] graphics fb0: fb_st7735r frame buffer, 128x160, 40 KiB video memory, 4 KiB DMA buffer memory, fps=20, spi1.0 at 32 MHz
root@beaglebone:~# 

@pdp7
Copy link
Author

pdp7 commented Aug 27, 2016

BAD: SPI0 pins: Linux 4.1.15-ti-r43

root@beaglebone:~# echo BB-SPIDEV0 > /sys/devices/platform/bone_capemgr/slots
root@beaglebone:~# ls -ltar /dev/spi*
crw-rw---- 1 root spi 153, 0 Aug 27 09:28 /dev/spidev1.0
crw-rw---- 1 root spi 153, 1 Aug 27 09:28 /dev/spidev1.1
root@beaglebone:~# modprobe fbtft_device busnum=1 verbose=3 name=adafruit18 gpios=dc:48,reset:60
root@beaglebone:~# 
root@beaglebone:~# dmesg 
[   28.873275] bone_capemgr bone_capemgr: part_number 'BB-SPIDEV0', version 'N/A'
[   28.873312] bone_capemgr bone_capemgr: slot #4: override
[   28.873329] bone_capemgr bone_capemgr: Using override eeprom data at slot 4
[   28.873345] bone_capemgr bone_capemgr: slot #4: 'Override Board Name,00A0,Override Manuf,BB-SPIDEV0'
[   28.887831] bone_capemgr bone_capemgr: slot #4: dtbo 'BB-SPIDEV0-00A0.dtbo' loaded; overlay id #0
[   38.511588] fbtft: module is from the staging directory, the quality is unknown, you have been warned.
[   38.529093] fbtft_device: module is from the staging directory, the quality is unknown, you have been warned.
[   38.532415] spidev spi1.0: spidev spi1.0 16000kHz 8 bits mode=0x01
[   38.532471] spidev spi1.1: spidev spi1.1 16000kHz 8 bits mode=0x00
[   38.532786] spidev spi1.0: Deleting spi1.0
[   38.538212] fbtft_device: GPIOS used by 'adafruit18':
[   38.548060] fbtft_device: 'dc' = GPIO48
[   38.548107] fbtft_device: 'reset' = GPIO60
[   38.548164] spidev spi1.1: spidev spi1.1 16000kHz 8 bits mode=0x00
[   38.548208] spi spi1.0: fb_st7735r spi1.0 32000kHz 8 bits mode=0x00
[   38.575014] fb_st7735r: module is from the staging directory, the quality is unknown, you have been warned.
[   39.510139] Console: switching to colour frame buffer device 16x20
[   39.510444] graphics fb0: fb_st7735r frame buffer, 128x160, 40 KiB video memory, 4 KiB DMA buffer memory, fps=20, spi1.0 at 32 MHz
root@beaglebone:~# 

@pdp7
Copy link
Author

pdp7 commented Aug 27, 2016

BAD trying SPI1 pins with SPI0 dtbo

[   52.128238] bone_capemgr bone_capemgr: part_number 'BB-SPIDEV0', version 'N/A'
[   52.133882] bone_capemgr bone_capemgr: slot #4: override
[   52.133955] bone_capemgr bone_capemgr: Using override eeprom data at slot 4
[   52.134005] bone_capemgr bone_capemgr: slot #4: 'Override Board Name,00A0,Override Manuf,BB-SPIDEV0'
[   52.874125] bone_capemgr bone_capemgr: slot #4: dtbo 'BB-SPIDEV0-00A0.dtbo' loaded; overlay id #0
root@beaglebone:~# dmesg -C
root@beaglebone:~# ls -ltar /dev/spidev1.0
crw-rw---- 1 root spi 153, 0 Aug 27 09:38 /dev/spidev1.0
root@beaglebone:~# modprobe fbtft_device busnum=1 verbose=3 name=adafruit18 gpios=dc:48,reset:60
root@beaglebone:~# dmesg
[   67.135063] fbtft: module is from the staging directory, the quality is unknown, you have been warned.
[   67.157078] fbtft_device: module is from the staging directory, the quality is unknown, you have been warned.
[   67.160670] spidev spi1.0: spidev spi1.0 16000kHz 8 bits mode=0x01
[   67.160706] spidev spi1.1: spidev spi1.1 16000kHz 8 bits mode=0x00
[   67.160897] spidev spi1.0: Deleting spi1.0
[   67.162108] fbtft_device: GPIOS used by 'adafruit18':
[   67.162131] fbtft_device: 'dc' = GPIO48
[   67.162144] fbtft_device: 'reset' = GPIO60
[   67.162168] spidev spi1.1: spidev spi1.1 16000kHz 8 bits mode=0x00
[   67.162188] spi spi1.0: fb_st7735r spi1.0 32000kHz 8 bits mode=0x00
[   67.188813] fb_st7735r: module is from the staging directory, the quality is unknown, you have been warned.
[   68.101777] Console: switching to colour frame buffer device 16x20
[   68.102831] graphics fb0: fb_st7735r frame buffer, 128x160, 40 KiB video memory, 4 KiB DMA buffer memory, fps=20, spi1.0 at 32 MHz
root@beaglebone:~# 

@pdp7
Copy link
Author

pdp7 commented Aug 27, 2016

How does bus_num in spidev.c get set?

drivers/spi/spi.c

struct spi_device *spi_new_device(struct spi_master *master,
                  struct spi_board_info *chip)
{
    struct spi_device   *proxy;
    int         status;

    /* NOTE:  caller did any chip->bus_num checks necessary.
     *
     * Also, unless we change the return value convention to use
     * error-or-pointer (not NULL-or-pointer), troubleshootability
     * suggests syslogged diagnostics are best here (ugh).
     */

    proxy = spi_alloc_device(master);
    if (!proxy)
        return NULL;

    WARN_ON(strlen(chip->modalias) >= sizeof(proxy->modalias));

    proxy->chip_select = chip->chip_select;
    proxy->max_speed_hz = chip->max_speed_hz;
    proxy->mode = chip->mode;
    proxy->irq = chip->irq;
    strlcpy(proxy->modalias, chip->modalias, sizeof(proxy->modalias));
    proxy->dev.platform_data = (void *) chip->platform_data;
    proxy->controller_data = chip->controller_data;
    proxy->controller_state = NULL;

    status = spi_add_device(proxy);
    if (status < 0) {
        spi_dev_put(proxy);
        return NULL;
    }

    return proxy;
}

@pdp7
Copy link
Author

pdp7 commented Aug 27, 2016

[pdp7@skylake KERNEL]$ find drivers/spi/|grep c$|xargs grep of_ |grep bus
drivers/spi/spi.c:      if (!of_property_read_u32(nc, "spi-tx-bus-width", &value)) {
drivers/spi/spi.c:      if (!of_property_read_u32(nc, "spi-rx-bus-width", &value)) {
drivers/spi/spi.c: * of_register_spi_devices() - Register child devices onto the SPI bus
drivers/spi/spi.c:      if ((master->bus_num < 0) && master->dev.of_node)
drivers/spi/spi.c:              master->bus_num = of_alias_get_id(master->dev.of_node, "spi");
drivers/spi/spi-fsl-dspi.c:     ret = of_property_read_u32(np, "bus-num", &bus_num);
drivers/spi/spi-mpc52xx.c:      ms->ipb_freq = mpc5xxx_get_bus_frequency(op->dev.of_node);
[pdp7@skylake KERNEL]$ 
[pdp7@skylake KERNEL]$ git branch -a
  master
  v3.8.13-bone80
  v4.1.14-bone17
  v4.1.15-bone17
  v4.1.30-bone23
* v4.4.19-bone13
  v4.7-rc2-bone0
  v4.8-rc3-bone1
  remotes/origin/HEAD -> origin/master
  remotes/origin/master
[pdp7@skylake KERNEL]$ 


Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment