Search code examples
linuxlinux-device-drivergpioangstrom-linux

Register level access in linux device driver


I have only 2 weeks experience in linux driver development, but have good experience on embedded c programming. I have only tried character device driver in linux. Now i wish to try a device driver for a set of LED's connected to GPIO. I am using BeagleBone Black. I wish to access it from the register level and not by just calling any driver. (I am doing this to learn the basics)

I wish my driver GPIO access code to be somewhat like below

void SetLED(unsigned char LED,unsigned char Status){
    //Read the port register
    //BitWise Operation according to function parameters
    //Write back to the register
}

But i need some help on how to access the registers directly in linux. I have got the actual address of the port OUT register from the datasheet as 0x4804C13C

Pardon me if i am breaking any basics in my question. I am really new to linux.


Solution

  • Your driver has to call

    struct resource *request_mem_region(unsigned long start, unsigned long len, char *name);
    

    to register exclusive access to that region of memory.

    Then it must use ioread8(),ioread16(), etc. and iowrite8(),iowrite16(), etc.