PINE64
What is name of gpio hardware on a rock64? - Printable Version

+- PINE64 (https://forum.pine64.org)
+-- Forum: ROCK64 (https://forum.pine64.org/forumdisplay.php?fid=85)
+--- Forum: Linux on Rock64 (https://forum.pine64.org/forumdisplay.php?fid=88)
+--- Thread: What is name of gpio hardware on a rock64? (/showthread.php?tid=5211)



What is name of gpio hardware on a rock64? - gene83 - 10-04-2017

The driver code checks for it, and will return a valid answer if its a bcm2709, bcm2835, bcm2836, or a bcm2837. Code is:
Code:
#define CPUINFO_BUFSIZE (16*1024) // Should be large enough for now static platform_t check_platform(void) { FILE *fp; char *buf; size_t fsize; platform_t rv = RPI_UNSUPPORTED; if(!(buf = rtapi_kmalloc(CPUINFO_BUFSIZE, RTAPI_GFP_KERNEL))) { rtapi_print_msg(RPSPI_ERR, "hm2_rpspi: No dynamic memory\n"); return RPI_UNSUPPORTED; } if(!(fp = fopen("/proc/cpuinfo", "r"))) { rtapi_print_msg(RPSPI_ERR, "hm2_rpspi: Failed to open /proc/cpuinfo\n"); goto check_exit; } fsize = fread(buf, 1, CPUINFO_BUFSIZE - 1, fp); fclose(fp); // we have truncated cpuinfo return unsupported if(!fsize || fsize == CPUINFO_BUFSIZE - 1) { rtapi_print_msg(RPSPI_ERR, "hm2_rpspi: Platform detection memory buffer too small\n"); goto check_exit; } /* NUL terminate the buffer */ buf[fsize] = '\0'; if(strstr(buf, "BCM2708")) { rv = RPI_1; } else if(strstr(buf, "BCM2709")) { rv = RPI_2; //for RPI 3 too } else if(strstr(buf, "BCM2835")) { // starting with 4.8 kernels revision tag has board details char *rev_val = strstr(buf, "Revision"); if(rev_val) { char *rev_start = strstr(rev_val, ": "); unsigned long rev = strtol(rev_start + 2, NULL, 16); if(rev <= 0xffff) rv = RPI_1; // pre pi2 revision scheme else { switch((rev & 0xf000) >> 12) { case 0: //bcm2835 rv = RPI_1; break; case 1: //bcm2836 case 2: //bcm2837 rv = RPI_2; // peripheral base is same on pi2/3 break; default: break; } } } } check_exit: rtapi_kfree(buf); return rv; } And all the c style indenting has been stripped, so how do I post code?  This sucks.



Thanks everybody.

Cheers, Gene83


RE: What is name of gpio hardware on a rock64? - dkryder - 10-04-2017

gpio is a function of the soc [rockchip 3328]


RE: What is name of gpio hardware on a rock64? - gene83 - 10-04-2017

Thank you very much.

Cheers, gene83


RE: What is name of gpio hardware on a rock64? - martinayotte - 10-04-2017

If you wish to verify that /proc/cpuinfo contains the board model, you better verify that first, because in some kernels, the name won't appear.
Some other way to do that is to verify /proc/device-tree/model ...


RE: What is name of gpio hardware on a rock64? - gene83 - 10-04-2017

The only place I can find that is in /proc/device-tree/spi@ff190000 and that isn't explicit.

There are rockchip, and rk3328's scattered here and there but I've no clue how volatile they may be. But they I think hold the most promise, but it a whole new kilobyte of prelude code to get there, and I haven't hacked on c code in 25 years. Complicated by my wet ram turning 83 yo today.

Cheers & thanks, martinayotte

Gene83


RE: What is name of gpio hardware on a rock64? - martinayotte - 10-05-2017

On my board, doing "cat /proc/device-tree/model" returns "PINE64 ROCK64".


RE: What is name of gpio hardware on a rock64? - gene83 - 10-05-2017

Whereas I get:Rockchip RK3328 Rock64

Without an eof or eol. And which would appear to be a valid ID.

Thanks. Not working on the code yet, morning here and I'm still a quart low on coffee. :-)

Cheers martinayotte, gene83