|
|
求大神给下面的程序做注解,请稍详细些,谢谢。
1 w( i: Q; C) j5 F* `#include <linux/init.h># k/ v. [& E# g
#include <linux/module.h>
# K' c/ _8 g' q! H; p/ u#include <linux/kernel.h>
* F# ]' k# O' x9 Y#include <linux/types.h>+ J5 ]- y+ b/ c2 D. B
#include <linux/gpio.h># n% a c/ E" A6 i0 S
#include <linux/leds.h>
. Y- j* ]% J+ E- ], j1 k" w#include <linux/platform_device.h>
9 K/ T, K% X0 n- k# l5 C- q
% O+ q+ I3 E* `% t/ s#include <asm/mach-types.h>! @4 g7 I6 C1 d2 t- c/ [& @" P9 [! z
#include <asm/mach/arch.h>' \- I# `1 _' m- D" K
#include <mach/da8xx.h>% D' |: M- x1 Y% ]2 J
#include <mach/mux.h>
" _2 n8 h l" d% V r# d+ q" Y& N- D* _
#define DA850_USER_LED0 GPIO_TO_PIN(0, 0)
& [ ^" e/ h0 t0 [$ r7 t& x7 O#define DA850_USER_LED1 GPIO_TO_PIN(0, 5)# s9 l; E( n: u$ V9 k( t
#define DA850_USER_LED2 GPIO_TO_PIN(0, 1)
8 L$ ]# a% g0 M#define DA850_USER_LED3 GPIO_TO_PIN(0, 2)
* z4 Y! R7 y6 ?, x. x: P# f) b+ X1 h, j1 X' J- @; _
/* assign the tl som board LED-GPIOs*/7 e2 k6 g0 J1 H# `7 p* `1 q; A& n
static const short da850_evm_tl_user_led_pins[] = {, d6 }) e$ K9 ^1 N
/* These pins are definition at <mach/mux.h> file */
7 V- @- C, \$ b7 w% h$ w9 i8 [; h DA850_GPIO0_0, DA850_GPIO0_1, DA850_GPIO0_2, DA850_GPIO0_5,
0 L' m! V+ t6 \ ?4 F -1! W4 ~ ~' R. U+ ?
};# q& u2 V+ ~: l( b* V/ x. l' k4 J5 c
& C* g K) ]! T% a% z, z. `static struct gpio_led da850_evm_tl_leds[] = {6 N1 p4 ^) D1 b, y6 p! X: j
{
2 h& e. J% j& @9 X* _/ I& A .active_low = 0,
1 v3 Z, K( n/ v/ P- A .gpio = DA850_USER_LED0,
1 W; T' \9 [% e* m .name = "user_led0",) P1 R9 {$ t& [
.default_trigger = "default-on",; q/ D; ^0 \2 X: F. B7 i+ @0 K1 ~
},
( F7 p" [% E, X {1 _1 ` {
: {+ v# K$ Y2 z7 D .active_low = 0,
8 T& t% e5 L/ ]. U9 U; v( B .gpio = DA850_USER_LED1,; [% d7 e/ @6 m+ W+ L2 C6 ^
.name = "user_led1",% b$ ]; S3 ^4 n
.default_trigger = "default-on",
' F& @# i4 Y) S0 t! N) R }, G) R" e" J/ b; p
{
4 N9 e) ]3 F! j0 u .active_low = 0,
1 }1 l3 z/ u+ c& \* v: H9 v .gpio = DA850_USER_LED2,! [1 g2 ~6 {; z) A% b+ Q0 J
.name = "user_led2",
; X E# Y# Z( G& Q& d .default_trigger = "default-on",
1 m" g: X- @& w* ]' `8 k# m. m; C) n },
4 {0 E7 B! y' X; } {
% J; b7 D, H0 V C9 f2 ` .active_low = 0,
7 M' H- H8 w" R% d$ j; B .gpio = DA850_USER_LED3,
* j% C3 c& s9 g+ L! _3 {, c6 z .name = "user_led3",; ~( N$ d' W5 U2 ~0 _
.default_trigger = "default-on",) t$ a% ]* S- C" c, ]1 c
},/ p+ r, Q/ G! J5 l0 e7 b
};$ d. v4 X% |; o" D: v
5 K" n Z9 v0 L# S7 z F5 C3 E- w
static struct gpio_led_platform_data da850_evm_tl_leds_pdata = {
5 A$ G, w2 T4 }' J4 ?9 n: G .leds = da850_evm_tl_leds,
; m5 Z" f4 _& {# V .num_leds = ARRAY_SIZE(da850_evm_tl_leds),
4 U0 o, Z, s* J, u1 w: L};
5 U) _ N* q" Q: X# J2 _
$ s4 F% Q3 t: ?+ K6 g( ^. r" W) ostatic void led_dev_release(struct device *dev)3 v1 o9 C. z, a/ |# y4 g
{* ~! Z5 o- s: `/ V' u/ q
}; q* j- s4 r- F4 D% s# c" r! g
) i; i' T- y4 _7 Mstatic struct platform_device da850_evm_tl_leds_device = {
9 t! t( ~4 i' C" u3 M7 |) U. F0 `: P .name = "leds-gpio",: O( W# X* T7 N& ]* q) h
.id = 1,6 B5 u) Q5 n. `, ]5 I
.dev = {
% c g3 O2 s6 }6 [4 M% _3 a( p .platform_data = &da850_evm_tl_leds_pdata,
/ h* y( P. }/ G0 R( C .release = led_dev_release,) I, o6 J8 {4 Y- z, E
}
/ b+ s, i4 E; v};
; R- \- D' F! X
8 `: h U' ~: B% g2 Kstatic int __init led_platform_init(void)
; I- B% {! w. t# l4 h, S5 a( F{6 E2 w! o! ~ t' m' P7 _
int ret;
1 l3 f b( n" a- I#if 0
% d3 H1 }; N. ] ret = davinci_cfg_reg_list(da850_evm_tl_user_led_pins);: ? d% B- m9 A9 y
if (ret)2 p: J8 q- M$ R* p
pr_warning("da850_evm_tl_leds_init : User LED mux failed :"! r( c$ T. h) D/ `. Z- _8 P
"%d\n", ret);& V1 Z2 C5 f/ S, Z: R! T
#endif; S( V: R* R! C
ret = platform_device_register(&da850_evm_tl_leds_device);) `6 X% g5 C. P& F8 n
if (ret)
! l# Y3 x6 W8 ? C% E9 P+ f8 K$ R pr_warning("Could not register som GPIO expander LEDS");
, ^% {- H' g+ K$ J. g; I7 X' k else
% o! _: r, d R9 t8 y' Z) Z3 ] printk(KERN_INFO "LED register sucessful!\n");
B0 m4 x# w5 s7 _ i
3 o& O9 A. U: M# V! ~' \ return ret;
1 h# c, S: e- T+ n, t! F% j( u) o}
2 Y" d# c1 ^! v4 r) K; T4 l; x
; V* Y( e! ]: f+ {8 l5 Astatic void __exit led_platform_exit(void)
( S q4 m# @# v! F7 U{
+ a; X1 _) I6 T platform_device_unregister(&da850_evm_tl_leds_device);: y; Q" k6 F7 ^6 v" z7 M! P
1 P4 Q* \7 }0 G' n; A, e printk(KERN_INFO "LED unregister!\n");8 R5 a+ g( a' m2 U9 G' h9 N" m6 \! E5 ~7 I
}* s! Q& K9 N# O- t5 _
& F% P3 a q: W. [. umodule_init(led_platform_init);
- E: Y1 G' }; O- Gmodule_exit(led_platform_exit);
% J$ e6 c9 }& i5 h$ X! D2 `: Z1 i# q7 H
MODULE_DESCRIPTION("Led platform driver");
( x' n2 _( J7 X) g) fMODULE_AUTHOR("Tronlong");8 y0 F4 d4 a1 d9 a# ~
MODULE_LICENSE("GPL");
2 o0 Y9 z4 o/ K, E6 `0 A) l& F1 a1 a- z$ l; T
|
|