Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
awilliam
GitHub Repository: awilliam/linux-vfio
Path: blob/master/Documentation/blackfin/gptimers-example.c
10821 views
1
/*
2
* Simple gptimers example
3
* http://docs.blackfin.uclinux.org/doku.php?id=linux-kernel:drivers:gptimers
4
*
5
* Copyright 2007-2009 Analog Devices Inc.
6
*
7
* Licensed under the GPL-2 or later.
8
*/
9
10
#include <linux/interrupt.h>
11
#include <linux/module.h>
12
13
#include <asm/gptimers.h>
14
#include <asm/portmux.h>
15
16
/* ... random driver includes ... */
17
18
#define DRIVER_NAME "gptimer_example"
19
20
struct gptimer_data {
21
uint32_t period, width;
22
};
23
static struct gptimer_data data;
24
25
/* ... random driver state ... */
26
27
static irqreturn_t gptimer_example_irq(int irq, void *dev_id)
28
{
29
struct gptimer_data *data = dev_id;
30
31
/* make sure it was our timer which caused the interrupt */
32
if (!get_gptimer_intr(TIMER5_id))
33
return IRQ_NONE;
34
35
/* read the width/period values that were captured for the waveform */
36
data->width = get_gptimer_pwidth(TIMER5_id);
37
data->period = get_gptimer_period(TIMER5_id);
38
39
/* acknowledge the interrupt */
40
clear_gptimer_intr(TIMER5_id);
41
42
/* tell the upper layers we took care of things */
43
return IRQ_HANDLED;
44
}
45
46
/* ... random driver code ... */
47
48
static int __init gptimer_example_init(void)
49
{
50
int ret;
51
52
/* grab the peripheral pins */
53
ret = peripheral_request(P_TMR5, DRIVER_NAME);
54
if (ret) {
55
printk(KERN_NOTICE DRIVER_NAME ": peripheral request failed\n");
56
return ret;
57
}
58
59
/* grab the IRQ for the timer */
60
ret = request_irq(IRQ_TIMER5, gptimer_example_irq, IRQF_SHARED, DRIVER_NAME, &data);
61
if (ret) {
62
printk(KERN_NOTICE DRIVER_NAME ": IRQ request failed\n");
63
peripheral_free(P_TMR5);
64
return ret;
65
}
66
67
/* setup the timer and enable it */
68
set_gptimer_config(TIMER5_id, WDTH_CAP | PULSE_HI | PERIOD_CNT | IRQ_ENA);
69
enable_gptimers(TIMER5bit);
70
71
return 0;
72
}
73
module_init(gptimer_example_init);
74
75
static void __exit gptimer_example_exit(void)
76
{
77
disable_gptimers(TIMER5bit);
78
free_irq(IRQ_TIMER5, &data);
79
peripheral_free(P_TMR5);
80
}
81
module_exit(gptimer_example_exit);
82
83
MODULE_LICENSE("BSD");
84
85