|
|
求大神给下面的程序做注解,请稍详细些,谢谢。
- H0 P, T. T. W6 v. `/ J#include <linux/init.h>
- i! O, t- a/ U#include <linux/module.h>/ w& Z- h' J# N3 z
#include <linux/kernel.h>$ a) J4 Q& P4 Y% a0 ]) m7 b: |$ t' x
#include <linux/types.h>
1 Z; J" t2 B% h" ?#include <linux/gpio.h>
& Y, I5 j# p( H6 V# x#include <linux/leds.h>
7 ?1 n9 f! S7 q; _2 Z9 X; ?#include <linux/platform_device.h>
; z+ Z9 D. \( k8 h$ @- O# x: _* a# {8 _
#include <asm/mach-types.h>
- r+ h* P1 ~" N' h' p- h' }#include <asm/mach/arch.h>! I/ f# l7 {3 H3 o5 W6 D: N
#include <mach/da8xx.h>" p+ j5 E/ X: O" c) L
#include <mach/mux.h>
$ D `7 W. j) A2 S% @/ c
' v4 C* h- `4 ?3 g. t; o#define DA850_USER_LED0 GPIO_TO_PIN(0, 0)
. L5 M3 f) l, e" J `#define DA850_USER_LED1 GPIO_TO_PIN(0, 5)- q) Z# p8 t' o6 z Y3 D Q$ V
#define DA850_USER_LED2 GPIO_TO_PIN(0, 1)
% M2 s6 K O" w# x$ V, q5 R#define DA850_USER_LED3 GPIO_TO_PIN(0, 2)
6 V1 O2 S9 c" X& p% e8 |/ p
, M1 j. O4 ~* o Y7 k/* assign the tl som board LED-GPIOs*/3 t& c+ d, r$ ^1 [
static const short da850_evm_tl_user_led_pins[] = {
, m( G0 V+ h3 }0 j9 j /* These pins are definition at <mach/mux.h> file *// y; `. ]( X( ]
DA850_GPIO0_0, DA850_GPIO0_1, DA850_GPIO0_2, DA850_GPIO0_5,. L' e, S: \ \& ~! F7 u- h1 ^
-1
3 F/ ^3 C3 E2 x% d7 h- N};
. F. S% n1 k; h7 x% w$ G
/ L. H/ C# d+ j. @' G) sstatic struct gpio_led da850_evm_tl_leds[] = {
0 U9 U/ C6 h0 d& o& V) _2 I% b {5 Z- B5 p8 }! L z7 X! q/ o
.active_low = 0,+ Z! Q/ W f* G- B
.gpio = DA850_USER_LED0,7 D& F, @% P3 c2 O9 O
.name = "user_led0",) F) `' ~. M3 I3 S, [2 n* v {; {8 G
.default_trigger = "default-on",
" D5 z4 l. W( O! w( n+ U% V }, `4 A S" p Y) N2 k) o
{
) D' w. s' ^) b+ x# h .active_low = 0,' _; t! b9 M. M1 H) Y7 @, G j
.gpio = DA850_USER_LED1,* f( s+ P! ^' _& f9 z8 s/ n
.name = "user_led1",
- f! |, |4 R5 s! m4 u- t4 J8 D8 B .default_trigger = "default-on",
\& K& p. Q5 P! c% X' b },
$ e* C2 F0 _- i {
8 Q% ^- D, C# x) U4 Z5 T& E .active_low = 0,7 m" j% E: c% a( U5 H
.gpio = DA850_USER_LED2,
7 [% q/ B5 l0 X0 p U( j, i/ A( ^ .name = "user_led2",8 z6 r7 z) H" e' G' W. t0 @3 ]
.default_trigger = "default-on",
- A' v, O- C i2 C9 t },
/ g+ @' ?. Z/ p: c( S) q! r% W {1 N2 |$ K/ y. c2 w7 {6 Y
.active_low = 0,
$ G$ B+ q5 Y4 o" ~7 ?! i9 e .gpio = DA850_USER_LED3,
( k7 M7 H) `- a+ O5 E .name = "user_led3"," z! v% ^6 M$ f% Y3 \& c6 ~
.default_trigger = "default-on",$ y; g. x' O9 I2 U
},
8 I6 R$ T3 _* Y};
% y/ [/ q7 S2 l) w- s: p% U! y" F+ ~- L+ Y- k
static struct gpio_led_platform_data da850_evm_tl_leds_pdata = {3 L6 Q' |4 i+ ]& a% a, e" @
.leds = da850_evm_tl_leds,/ E+ a8 `+ l" D8 b7 a
.num_leds = ARRAY_SIZE(da850_evm_tl_leds),
$ ?/ a- ^% B) R$ d6 z ^! X( P};
: ?( o8 Q) Y" V5 L* w" K! z# K0 g5 u1 @1 K, m8 o4 @9 R- w3 a
static void led_dev_release(struct device *dev)
% {" I, n$ w) R- m1 N{ M1 @8 x) N* O: J, {: N+ U
};
0 @: Z0 k9 S# Y5 E7 x# Y) T8 _ g* _" e" R
static struct platform_device da850_evm_tl_leds_device = {
. L, Y6 V2 [. d& ?. ]5 Q .name = "leds-gpio",
* s7 _8 @: ~5 e; N .id = 1,! U6 Y* u8 q3 g, b
.dev = {
2 R) y; r# M6 q; H: E$ z$ E* J .platform_data = &da850_evm_tl_leds_pdata,4 n7 G# r3 b8 O$ c
.release = led_dev_release,
" n7 W2 q; }/ c2 f- g; B }
( |* j1 I! c4 h6 C};
, Z- I6 |2 R% y9 @/ f0 |" T# G2 b* Y
static int __init led_platform_init(void)
7 t+ H g+ K- D# m9 E8 s! \" W{
B5 \* u6 V! E! m5 M int ret;
8 Y" X$ \( k6 A6 O+ @#if 00 \+ }9 x7 W) u* ]# F- S
ret = davinci_cfg_reg_list(da850_evm_tl_user_led_pins);
1 T) q F n2 m! ~3 k4 Y7 h5 N if (ret)
( @7 c, x6 W$ V2 q3 P9 Q- `$ i pr_warning("da850_evm_tl_leds_init : User LED mux failed :"7 d- d# A6 v% w2 S7 _; [
"%d\n", ret);9 I- w! W# M' O
#endif
$ q( E- ]* L7 Y( N7 @3 O ret = platform_device_register(&da850_evm_tl_leds_device);2 v) i; b! B& E2 v7 m' w3 e
if (ret) W' q& m8 Z7 {3 h' w( y: G
pr_warning("Could not register som GPIO expander LEDS");
0 ], G; D4 V6 G' f' t4 v. d: l! P else
( _% Q# K5 s9 A+ t printk(KERN_INFO "LED register sucessful!\n");
2 W; [ F9 C- Z3 a3 C1 i: r9 s
3 ]8 V# Z$ K0 u9 U4 ~ return ret;
+ M( H K3 g0 v& X. D# ^' o}
2 f& T$ w5 n! t7 n# k2 k: }0 q f' j, {- Q1 [- R) k' ^4 y e, O! L
static void __exit led_platform_exit(void)
* V1 S0 W0 \! p9 w2 R+ u{
( o8 n% x! j! T- j0 A6 L5 M5 U9 \ platform_device_unregister(&da850_evm_tl_leds_device);
- Z0 ?5 V/ d) a, p% v
0 h8 u: G# ?# q- }' y printk(KERN_INFO "LED unregister!\n");
" H2 X8 h& _% e' u" `) s2 z}
$ B/ Y C U, o# d" \, o2 k/ m( e, [; x2 h4 e1 H
module_init(led_platform_init);+ ?- Y3 q4 R- j2 x& o
module_exit(led_platform_exit);) s& r# R' a8 b
4 z5 d# m- |- c" l8 e7 VMODULE_DESCRIPTION("Led platform driver");8 U# }1 M4 ?% k8 e
MODULE_AUTHOR("Tronlong");+ M: }! f1 E$ G
MODULE_LICENSE("GPL");
* y6 h# O+ X0 Q7 B7 g5 Q" D% d+ y- z$ y
|
|