Skip to content

Commit

Permalink
---
Browse files Browse the repository at this point in the history
yaml
---
r: 177280
b: refs/heads/master
c: 4b60779
h: refs/heads/master
v: v3
  • Loading branch information
Mike Frysinger committed Dec 15, 2009
1 parent 00084cf commit 070b0bd
Show file tree
Hide file tree
Showing 3 changed files with 90 additions and 1 deletion.
2 changes: 1 addition & 1 deletion [refs]
Original file line number Diff line number Diff line change
@@ -1,2 +1,2 @@
---
refs/heads/master: 7a1a8cc1902af3a2a19636da3674008b2f1246db
refs/heads/master: 4b60779d5ea76908c3bc82d93280b733335fce48
6 changes: 6 additions & 0 deletions trunk/Documentation/blackfin/Makefile
Original file line number Diff line number Diff line change
@@ -0,0 +1,6 @@
obj-m := gptimers-example.o

all: modules

modules clean:
$(MAKE) -C ../.. SUBDIRS=$(PWD) $@
83 changes: 83 additions & 0 deletions trunk/Documentation/blackfin/gptimers-example.c
Original file line number Diff line number Diff line change
@@ -0,0 +1,83 @@
/*
* Simple gptimers example
* http://docs.blackfin.uclinux.org/doku.php?id=linux-kernel:drivers:gptimers
*
* Copyright 2007-2009 Analog Devices Inc.
*
* Licensed under the GPL-2 or later.
*/

#include <linux/interrupt.h>
#include <linux/module.h>

#include <asm/gptimers.h>
#include <asm/portmux.h>

/* ... random driver includes ... */

#define DRIVER_NAME "gptimer_example"

struct gptimer_data {
uint32_t period, width;
};
static struct gptimer_data data;

/* ... random driver state ... */

static irqreturn_t gptimer_example_irq(int irq, void *dev_id)
{
struct gptimer_data *data = dev_id;

/* make sure it was our timer which caused the interrupt */
if (!get_gptimer_intr(TIMER5_id))
return IRQ_NONE;

/* read the width/period values that were captured for the waveform */
data->width = get_gptimer_pwidth(TIMER5_id);
data->period = get_gptimer_period(TIMER5_id);

/* acknowledge the interrupt */
clear_gptimer_intr(TIMER5_id);

/* tell the upper layers we took care of things */
return IRQ_HANDLED;
}

/* ... random driver code ... */

static int __init gptimer_example_init(void)
{
int ret;

/* grab the peripheral pins */
ret = peripheral_request(P_TMR5, DRIVER_NAME);
if (ret) {
printk(KERN_NOTICE DRIVER_NAME ": peripheral request failed\n");
return ret;
}

/* grab the IRQ for the timer */
ret = request_irq(IRQ_TIMER5, gptimer_example_irq, IRQF_SHARED, DRIVER_NAME, &data);
if (ret) {
printk(KERN_NOTICE DRIVER_NAME ": IRQ request failed\n");
peripheral_free(P_TMR5);
return ret;
}

/* setup the timer and enable it */
set_gptimer_config(TIMER5_id, WDTH_CAP | PULSE_HI | PERIOD_CNT | IRQ_ENA);
enable_gptimers(TIMER5bit);

return 0;
}
module_init(gptimer_example_init);

static void __exit gptimer_example_exit(void)
{
disable_gptimers(TIMER5bit);
free_irq(IRQ_TIMER5, &data);
peripheral_free(P_TMR5);
}
module_exit(gptimer_example_exit);

MODULE_LICENSE("BSD");

0 comments on commit 070b0bd

Please sign in to comment.