I believe the only way is to remove them from the main device tree overlay
since that will be loaded before anything else you can do. Decompile the
dtbo, remove the usr led entries in the resulting dts, and recompile to
dtbo (at least this is how it used to work).


On Wed, Aug 13, 2014 at 3:10 PM, Patrick Sheridan <sher...@gmail.com> wrote:

> Hi Brandon,
>
> I'm currently using mmap (in Python) to achieve register wide GPIO.  I'm
> concerned though, that the kernel still thinks it owns that memory and
> might inadvertently write to it (for ex:  if you forget to disable the
> heartbeat trigger).  Do you know of a way to disable the sysfs interface /
> claim those pins as being in use so that you can safely manipulate the mmap
> either through software or a device tree overlay?
>
> Thanks for your help.
>
>
> On Tuesday, July 29, 2014 3:09:08 PM UTC-4, Brandon I wrote:
>>
>> That's still one bit control. There's going to be some unknown time
>> between the bits that will depend on cpu usage. For true 8 bit, you need to
>> use mmap to get a pointer to the gpio control block and modify the
>> registers directly.
>> Each gpio block has 32 pins, and each gpio block has a set and clear
>> register that's 32 bits wide, one bit for each pin. Setting a bit in the
>> set register will set the pin. Setting a bit in the clear register will
>> clear the pin. So, to set 8 pins at once, you would write the 8 bits to the
>> set, then to clear all 8, you would write those 8 bits to the clear
>> register. This will truly be "at once", at least to the capabilities of the
>> hardware.
>>
>> Sysfs has some pretty absurd overhead, so you'll get a few hundred kHz at
>> most. With the the register manipulation using mmap, you'll end up with ~4
>> MHz for a toggle like that.
>>
>>
>> On Sunday, July 27, 2014 4:09:56 AM UTC-7, kthab...@gmail.com wrote:
>>>
>>> /sys/class/gpio/export  this driver file i have used.
>>>
>>> but this control only one bit. so, i try to 8bit control like this
>>>
>>> #include "bb_gpio.h"
>>> #include <stdio.h>
>>> #include <sys/time.h>
>>> //#include <string.h>
>>>
>>> void main(void)
>>> {
>>> gpio_export(p9_11); gpio_export(p9_12);
>>>  gpio_export(p9_13); gpio_export(p9_14);
>>> gpio_export(p9_15); gpio_export(p9_16);
>>> gpio_export(p9_17); gpio_export(p9_18);
>>>
>>> gpio_direction(p9_11,out); gpio_direction(p9_12,out);
>>> gpio_direction(p9_13,out); gpio_direction(p9_14,out);
>>>  gpio_direction(p9_15,out); gpio_direction(p9_16,out);
>>> gpio_direction(p9_17,out); gpio_direction(p9_18,out);
>>>  while(1){
>>> pin_write(p9_11,1); pin_write(p9_12,1);
>>> pin_write(p9_13,1); pin_write(p9_14,1);
>>>  pin_write(p9_15,1); pin_write(p9_16,1);
>>> pin_write(p9_17,1); pin_write(p9_18,1);
>>> sleep(1);
>>>  pin_write(p9_11,0); pin_wirte(p9_12,0);
>>> pin_write(p9_13,0); pin_wirte(p9_14,0);
>>> pin_write(p9_15,0); pin_wirte(p9_16,0);
>>>  pin_write(p9_17,0); pin_wirte(p9_18,0);
>>> sleep(1);
>>> };
>>> }
>>>
>>>
>>> ================#include "bb_gpio.h"================
>>>
>>> #ifndef BB_GPIO_H_
>>> #define BB_GPIO_H_
>>>
>>> #include <stdio.h>
>>> #include <string.h>
>>>
>>> /********************************************
>>> * BB_GPIO headerfile
>>> * This file only used to gpio control
>>> * other feature using device-tree-overlay
>>> * when using GPIO, the pin work to MODE7
>>> *=====formula======
>>> * GPIO N1[N2]
>>> * gpio_number = (32 x N1) + N2
>>> *==================
>>> *********************************************/
>>>
>>> #define out 1
>>> #define in 0
>>>
>>> #define  export_PATH  "/sys/class/gpio/export"
>>> #define  value_PATH "/sys/class/gpio/gpio%d/value"
>>> #define  direction_PATH "/sys/class/gpio/gpio%d/direction"
>>> #define unexport_PATH "/sys/class/gpio/unexport"
>>>
>>> //*********************P9***********************
>>> #define  p9_11   30
>>> #define  p9_12   60
>>> #define  p9_13   31
>>> #define  p9_14  50
>>> #define  p9_15  48
>>> #define  p9_16  51
>>> #define  p9_17 5
>>> #define  p9_18 4
>>> //#define  p9_19 13
>>> //#define  p9_20 12
>>> #define  p9_21 3
>>> #define P9_22 2
>>> #define  p9_23  49
>>> #define  p9_24  15
>>> #define  p9_25  117
>>> #define  p9_26  14
>>> #define  p9_27  115
>>> //#define  p9_28  113
>>> //#define  p9_29  111
>>> #define  p9_30 112
>>> //#define  p9_31  110
>>> #define  p9_41  20
>>> //#define  p9_41  116
>>> //#define  p9_42  114
>>> #define  p9_42 7
>>> //*********************************************
>>>
>>>
>>> //*********************P8***********************
>>> //*********************************************
>>>
>>>
>>>
>>> //******************function*********************
>>> int gpio_export(int);
>>> int gpio_unexport(int);
>>> int gpio_direction(int, int);
>>> int pin_write(int, int);
>>> int pin_read(int);
>>> //***********************************************
>>>
>>>
>>> #endif /*BB_GPIO_*/
>>>
>>> int gpio_export(int gpio_number)
>>> {
>>> FILE* fp=0;
>>>
>>> if((fp = fopen(export_PATH,"w"))==NULL){
>>>  printf("Cannot open export file(>>%s).\n", export_PATH);
>>> return -1;
>>> }
>>>  fprintf(fp,"%d",gpio_number);
>>> fclose(fp);
>>> }
>>>
>>> int gpio_unexport(int gpio_number)
>>> {
>>> FILE* fp;
>>>
>>> if((fp = fopen(unexport_PATH,"w"))==NULL){
>>> printf("Cannot open unexport file(>>%s).\n", unexport_PATH);
>>>  return -1;
>>> }
>>> fprintf(fp,"%d",gpio_number);
>>> fclose(fp);
>>> }
>>>
>>> int gpio_direction(int gpio_number,int direction)
>>> {
>>> FILE* fp;
>>> char set_value[4]={0};
>>>  char dir_path[50]={0};
>>> sprintf(dir_path, direction_PATH, gpio_number);
>>> if((fp = fopen(dir_path,"w"))==NULL){
>>>  printf("Cannot open direction file(>>%s).\n",dir_path);
>>> return -1;
>>> }
>>>  rewind(fp);
>>> if(direction == out){
>>> strcpy(set_value,"out");
>>>  fwrite(&set_value,sizeof(char),3,fp);
>>> fclose(fp);
>>> } else if(direction == in){
>>>  strcpy(set_value,"in");
>>> fwrite(&set_value,sizeof(char),2,fp);
>>> fclose(fp);
>>>  } else{
>>> printf("invalue pin mode(%d)\n",direction);
>>> return -1;
>>>  }
>>> fclose(fp);
>>> return 1;
>>> }
>>>
>>> int pin_write(int gpio_number,int value)
>>> {
>>> FILE* fp;
>>> char val_path[50]={0};
>>> char set_value[2]={0};
>>>
>>> sprintf(val_path, value_PATH, gpio_number);
>>> if((fp = fopen(val_path,"w"))==NULL){
>>> printf("Cannot open value file(>>%s).\n",val_path);
>>>  return -1;
>>> }
>>>
>>> rewind(fp);
>>> if(value == 1){
>>>  strcpy(set_value,"1");
>>> }
>>> else if(value == 0){
>>>  strcpy(set_value,"0");
>>> }
>>> else {
>>> printf("invalid value pin(%d)(%d)\n", gpio_number, value);
>>>  return -1;
>>> }
>>>
>>> fwrite(&set_value, sizeof(char), 1, fp);
>>>  fclose(fp);
>>> return 0;
>>> }
>>>
>>> int pin_read(int gpio_number)
>>> {
>>> FILE* fp;
>>>  int value=0;
>>> char val_path[50]={0};
>>>
>>> sprintf(val_path, value_PATH, gpio_number);
>>>  if((fp = fopen(val_path,"r"))==NULL){
>>> printf("Cannot open value file(>>%s).\n",val_path);
>>>  return -1;
>>> }
>>>
>>> rewind(fp);
>>> value = fgetc(fp) - '0';
>>>  fclose(fp);
>>> return value;
>>> }
>>>
>>>
>>>
>>>
>>> but compile error...
>>>
>>> root@beaglebone:/home/debian/workspace/sources/gpio_control# \
>>> > gcc -o led_blink led_blink.c
>>> /tmp/ccfrwmlk.o: In function `main':
>>> led_blink.c:(.text+0x5c8): undefined reference to `pin_wirte'
>>> led_blink.c:(.text+0x5e0): undefined reference to `pin_wirte'
>>> led_blink.c:(.text+0x5f8): undefined reference to `pin_wirte'
>>> led_blink.c:(.text+0x610): undefined reference to `pin_wirte'
>>> collect2: ld returned 1 exit status
>>> root@beaglebone:/home/debian/workspace/sources/gpio_control#
>>>
>>> i don't know why .. help please
>>>
>>  --
> For more options, visit http://beagleboard.org/discuss
> ---
> You received this message because you are subscribed to a topic in the
> Google Groups "BeagleBoard" group.
> To unsubscribe from this topic, visit
> https://groups.google.com/d/topic/beagleboard/vd1RuAIbT-o/unsubscribe.
> To unsubscribe from this group and all its topics, send an email to
> beagleboard+unsubscr...@googlegroups.com.
> For more options, visit https://groups.google.com/d/optout.
>

-- 
For more options, visit http://beagleboard.org/discuss
--- 
You received this message because you are subscribed to the Google Groups 
"BeagleBoard" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to beagleboard+unsubscr...@googlegroups.com.
For more options, visit https://groups.google.com/d/optout.

Reply via email to