|
|
求大神给下面的程序做注解,请稍详细些,谢谢。/ P; _% T: a I5 g5 B8 @
#include <linux/init.h>- F5 f* a' z& k- j+ P' P0 K4 M
#include <linux/module.h># \7 w& i& t5 |
#include <linux/kernel.h>9 K- @+ q7 n L, n
#include <linux/types.h>6 i% \2 z6 @2 C+ ]0 L' z- o; r
#include <linux/gpio.h>
6 I _' G: n( }5 a#include <linux/leds.h>, ~2 @, T+ ?! m% e
#include <linux/platform_device.h>7 A5 T/ ]+ m/ V' y2 V/ f! E# g
0 Q/ q0 Q0 M# Q
#include <asm/mach-types.h>
, K" ]6 F% E) k' w+ d#include <asm/mach/arch.h>
9 J; E( z1 T$ C! y: o#include <mach/da8xx.h>
0 L& \6 A9 K k1 O* L3 k#include <mach/mux.h>
& I& s0 p: B7 D1 z# m2 M+ ^% T) u1 S: k, J, `3 y- f
#define DA850_USER_LED0 GPIO_TO_PIN(0, 0)
! G! ?, ?; F0 o#define DA850_USER_LED1 GPIO_TO_PIN(0, 5); [) n& R ^4 {9 u. j M9 W& i
#define DA850_USER_LED2 GPIO_TO_PIN(0, 1)& {, E$ G& C, R
#define DA850_USER_LED3 GPIO_TO_PIN(0, 2)
, N. O2 G1 P! E
9 D9 m9 |+ n" g) T* v/* assign the tl som board LED-GPIOs*/
) p1 x% h2 l2 ~3 p5 {9 Jstatic const short da850_evm_tl_user_led_pins[] = {
( g, F" }. R% g7 ^- n* e6 G1 @! u" Q /* These pins are definition at <mach/mux.h> file */& O$ J) k8 f" e
DA850_GPIO0_0, DA850_GPIO0_1, DA850_GPIO0_2, DA850_GPIO0_5,
/ y- O, _* k# C1 g+ R -1
" V% k: F4 t# R4 K" M+ d};' O9 J2 o' W) H# c4 L6 B
: I/ c# M' p8 M, g, z$ z8 l) Q
static struct gpio_led da850_evm_tl_leds[] = {
# o( W6 a' A) \ s G1 @+ @0 G {
' s0 E. y% k+ L5 f$ T .active_low = 0,
. }1 l: y) z7 A3 O7 ^( {8 E7 S .gpio = DA850_USER_LED0,
5 C6 R, C8 |9 {1 N .name = "user_led0",
[ c- D7 u/ T5 Q' Q .default_trigger = "default-on",
4 i" n* U/ [, d/ y# X0 Y },0 l3 ^5 K4 i0 k# S, T* o
{
$ m" t$ k& K% ~: x( H .active_low = 0,
; d6 F F: Z$ o* K; j' k/ S .gpio = DA850_USER_LED1,. l# _3 q. r0 L! F7 z
.name = "user_led1",
1 |3 S. u1 C7 F$ ^; V O# n. b .default_trigger = "default-on",
; I3 X4 g5 L/ H5 m9 k3 v% U6 N; t( G },7 O# Q4 j# i1 R d$ F' ]* y
{
/ |# z! r6 i# m/ t$ v' J( j .active_low = 0,9 V4 N- p4 h$ L" z( ]
.gpio = DA850_USER_LED2,
G' t7 U P/ E1 h8 z .name = "user_led2",
' j; N! n. x/ h* V .default_trigger = "default-on",
5 h0 c, A, a, ? },; Q F8 a6 [9 a' x4 f
{: [3 P; g. y* f. y [7 b0 p
.active_low = 0,$ O9 @$ f, I8 D0 s
.gpio = DA850_USER_LED3,
# @- X$ p# B7 ?+ X; {9 ]# ]3 v( s .name = "user_led3",4 [9 G, {* k ^2 E0 x" z# \2 b* z
.default_trigger = "default-on",
, r/ j) g- [* r, w; a3 P" {! y },
2 S0 f' C8 T1 e: G};" y: f4 K( b$ p
$ E( E9 ^ @3 ^- M% g8 i" pstatic struct gpio_led_platform_data da850_evm_tl_leds_pdata = {
/ z2 I5 u" Y3 {$ \8 I6 v .leds = da850_evm_tl_leds," G/ S6 p% T# J' x) L: Z
.num_leds = ARRAY_SIZE(da850_evm_tl_leds),
5 u, w# i }8 ^ C$ _; n% m};
; r4 X/ _4 q0 W; ~$ n0 O0 [2 V! T0 l. Y
static void led_dev_release(struct device *dev)" v: G/ T/ A4 U- g$ F: x) K& w9 i3 q
{ g. i+ E* E, v+ }0 o: |
};
) x# a) W( x6 p
* e8 O7 Y5 |- E E+ d4 Gstatic struct platform_device da850_evm_tl_leds_device = {% ?' Z( W% X3 M9 e3 }* E4 l% I! n$ k
.name = "leds-gpio",# x4 x! O' y( S7 h* X5 ?% I, ~) h! A
.id = 1,9 N* ~$ J$ H3 A- z1 y% v& s+ O' r
.dev = {; a! z3 g2 e U8 f
.platform_data = &da850_evm_tl_leds_pdata,1 o/ i) l; _) v8 Z- J6 i z! d
.release = led_dev_release, g5 k% b: E0 \/ u3 W# j2 U* F
}& N4 a. ~& k/ q, `. J* P3 w
};
! ]) }6 q9 Z3 J$ R" X+ V& w$ ?: F) j9 ?* d( \1 o
static int __init led_platform_init(void)" X, m: E& j* C# Z
{* b8 N! J- {1 ~; Z" {
int ret;
: i) r$ W+ C- V/ h9 U#if 0# ]% |$ i; y$ c9 R; {8 U" y$ V& @
ret = davinci_cfg_reg_list(da850_evm_tl_user_led_pins);
8 |7 I' G7 j% q4 P/ B. Y1 _8 F if (ret)- V5 I/ H( E- r7 f( q
pr_warning("da850_evm_tl_leds_init : User LED mux failed :"
: z" I& B e$ r9 c: X "%d\n", ret);
6 D* l+ C1 `" u8 k" O1 T#endif# g/ O+ N: }1 A
ret = platform_device_register(&da850_evm_tl_leds_device);7 P- a8 I, {% V# A" m
if (ret)
1 Y* `: W+ P0 P( Y% I P: b pr_warning("Could not register som GPIO expander LEDS");
8 k/ V* @3 R8 E1 o" D# L( q else! y2 ~; P- z- l- K7 J
printk(KERN_INFO "LED register sucessful!\n");/ Z2 s2 d1 Y$ m( W2 f
6 B' u5 f" v, Y ]% O* I: | return ret;3 V4 f7 }1 `* s! v" I
}
5 b* @3 x0 A( W& x, Z4 f
; u7 ` E0 M) X3 H# Ustatic void __exit led_platform_exit(void)
% r; {6 X( k" f$ r6 f. n5 i{
7 v+ c& b- L& K. h' I) z$ s platform_device_unregister(&da850_evm_tl_leds_device);$ {. H6 ^5 w. z
1 P* u- s1 R @1 Y2 n printk(KERN_INFO "LED unregister!\n");, G, f0 ~5 `1 W) N8 i( @
}' j2 v! K+ o, b1 `& i! S; l2 T* j
5 A# C' v: I7 o: t6 M
module_init(led_platform_init);/ P5 {. f; S" _
module_exit(led_platform_exit);8 |" ?4 f6 s6 S' J
% F [# U/ l O8 r
MODULE_DESCRIPTION("Led platform driver");9 f% ]( S- p$ H7 W
MODULE_AUTHOR("Tronlong");
$ V* P6 Q( N1 ^" @- d* kMODULE_LICENSE("GPL");
& T! I( G+ O' v: M1 }, V
8 a/ R8 P/ k, d( z' q, n6 z |
|