About Kernel Documentation Linux Kernel Contact Linux Resources Linux Blog

Documentation / blackfin / gptimers-example.c




Custom Search

Based on kernel version 3.16. Page generated on 2014-08-06 21:36 EST.

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");
Hide Line Numbers
About Kernel Documentation Linux Kernel Contact Linux Resources Linux Blog

Information is copyright its respective author. All material is available from the Linux Kernel Source distributed under a GPL License. This page is provided as a free service by mjmwired.net.