|
|
求大神给下面的程序做注解,请稍详细些,谢谢。
0 p2 v9 l# y6 [. T#include <linux/init.h>
! l; e8 V* O9 ~9 u, u! {#include <linux/module.h>
3 ~+ a* t, I! x! t#include <linux/kernel.h>
5 r1 p+ O+ X5 v6 f4 Y$ O+ K#include <linux/types.h>% O: C! T, T1 J$ I
#include <linux/gpio.h>) r; {) _0 P. M$ k) c# J: M
#include <linux/leds.h>) `4 t$ `* Y" ?9 x$ j; H
#include <linux/platform_device.h>6 v2 Z5 Y0 u, [. h9 B. D7 h7 k8 @
, p) i7 N# D. g
#include <asm/mach-types.h>2 a; y$ ~% N, m8 A) L4 t
#include <asm/mach/arch.h>
# j& ?6 L3 d8 T% M#include <mach/da8xx.h>' G9 g/ F/ ]. q: \
#include <mach/mux.h>1 ?$ s, d8 p7 B5 n3 g" y
, i6 F) s$ M/ s#define DA850_USER_LED0 GPIO_TO_PIN(0, 0)$ L5 g/ Q7 o! `) E! W
#define DA850_USER_LED1 GPIO_TO_PIN(0, 5); X, t' B6 x+ ]# [' L" u
#define DA850_USER_LED2 GPIO_TO_PIN(0, 1)
5 z6 V# d- B3 m( i, x#define DA850_USER_LED3 GPIO_TO_PIN(0, 2)' L% {1 ]1 f* P& s( X/ w1 l3 A
' B, t& | S8 z7 g0 X- x$ \
/* assign the tl som board LED-GPIOs*/
( g0 b9 N4 v! Z) ]0 @* d* { _static const short da850_evm_tl_user_led_pins[] = {& p1 q6 z3 J/ Z6 v$ k7 |+ c
/* These pins are definition at <mach/mux.h> file */) x& ? W8 t3 l
DA850_GPIO0_0, DA850_GPIO0_1, DA850_GPIO0_2, DA850_GPIO0_5,! B4 U: o- ?3 ^4 _% U$ f. @/ |
-1
3 N3 a8 j' Q0 j& |+ y( s2 o};% E9 b- r& v% s3 |
$ h! G9 Q" }$ b! l! ]6 U4 {
static struct gpio_led da850_evm_tl_leds[] = {
/ [8 M% j2 s$ F {* t" s( U" X& [: @ t# i, q% V
.active_low = 0,* ]; I- p3 p. [( a- K$ S' Z
.gpio = DA850_USER_LED0,
7 ]! {7 S2 R$ H7 V5 j& l6 N .name = "user_led0",- Q1 I; P" f+ `( H) K1 q
.default_trigger = "default-on",: n% ~ }, z5 h1 U
},+ M/ H$ _% ~9 u- ?6 P) u: u5 i) D$ X
{$ U1 I3 i$ x, e" d. t0 @8 J( a
.active_low = 0,3 ]4 @4 `: L! j" y, ]; s
.gpio = DA850_USER_LED1,
& v: f# i, n, F1 ?7 O- \# z) E$ F .name = "user_led1",
^4 m' _" X2 \0 m .default_trigger = "default-on",
# j! d# D+ T$ N L; ` },
; g! o; k. u* { {# N* A u) t% @4 l2 n* D) g
.active_low = 0,
& ]) d% h: N% i# m) r .gpio = DA850_USER_LED2,
- p0 o. F$ M* z0 q0 ]5 _ .name = "user_led2",9 Y G$ @, @# w; u5 U8 O
.default_trigger = "default-on",
* o9 i& y6 E2 X) @: y; r$ e },7 o+ d: T$ L* `5 e4 X2 W" m
{+ s$ S6 \2 t6 c6 k4 W7 p
.active_low = 0,
$ i! h' f9 A0 a5 K! S .gpio = DA850_USER_LED3,3 N4 O) N' P2 k' _
.name = "user_led3",
! S5 K- i& v, ~2 f6 w; U .default_trigger = "default-on",5 ]* B; R% E+ g% r
},
0 E, ^. p9 O/ S};
- P4 K& a: y9 p2 I `" T3 W2 K/ Y/ P$ l
static struct gpio_led_platform_data da850_evm_tl_leds_pdata = {; ] V. z: W1 a1 b
.leds = da850_evm_tl_leds,$ e2 U! q0 I; t/ W( ^+ ]) c3 K3 F
.num_leds = ARRAY_SIZE(da850_evm_tl_leds),
# t' x7 t. n$ ?- j7 _};9 t) E) F8 _& v- w$ H% K
3 I6 V6 }4 r l. Istatic void led_dev_release(struct device *dev)9 q w5 [- R& O+ ^
{
8 B" L/ Q/ }: W. \9 a};
2 A/ W; R# N" q0 H* I9 m/ Q
1 F* f/ V3 x( n( U& ^ | o. c0 Zstatic struct platform_device da850_evm_tl_leds_device = {9 t& e- c L% t8 K' F
.name = "leds-gpio",) q3 B* ^0 z( q1 F
.id = 1,
2 F5 O/ A* p: r .dev = {- ^! l z/ [; a% u N
.platform_data = &da850_evm_tl_leds_pdata, [& I4 U1 N4 M0 l. [8 P
.release = led_dev_release,) k8 ^# Z: E* `* K7 Q
}5 w J$ R, G0 [/ L- l. U1 n
};- _ y5 ~* Y, I9 U4 D. m* s
6 d7 m8 D; {& S' B/ _! pstatic int __init led_platform_init(void)
% O- v3 H1 v: V4 H. Y: D) W{ s6 W: p: a- S4 N5 h/ @9 a1 a: u
int ret;( F) o0 v/ I+ M# f0 Z
#if 0
3 E) C- P5 ^/ m ret = davinci_cfg_reg_list(da850_evm_tl_user_led_pins); ~% O. [/ p8 |, X# d
if (ret)
( h' O1 b( q$ [ pr_warning("da850_evm_tl_leds_init : User LED mux failed :"
9 r* d; r9 ]1 p1 Q0 G "%d\n", ret);% ?; N" G: y0 k5 ]: Z
#endif$ Z# w* U* j7 h$ B3 P
ret = platform_device_register(&da850_evm_tl_leds_device);
5 e8 a) L! l9 c8 L% h& W+ z1 D' b# a if (ret)% y0 e c! U1 Z( ?
pr_warning("Could not register som GPIO expander LEDS");6 M3 N$ ?" J" x; d: g! B5 b
else
4 u ?9 l. A3 N! e3 C. g printk(KERN_INFO "LED register sucessful!\n");
) j% z4 Y% O- m" ?" z6 V" O# b. f9 U2 W
return ret;; {8 D, _+ X5 ]& d- o( L
}& e! h, ~7 f6 @9 n" e
; S6 A% i5 R; I- Q" w
static void __exit led_platform_exit(void)9 q+ j9 ?/ b' I8 N
{
6 I2 r1 h# W% d m; [ platform_device_unregister(&da850_evm_tl_leds_device);
3 b& _% }; O+ W8 T% t7 a- n+ v4 {
; q# n1 n* r; w4 \' q( q printk(KERN_INFO "LED unregister!\n");
6 a( z: ~ Z2 }}$ ]5 u$ K2 K, I# _
4 c) x: k+ j6 P$ o, q* N zmodule_init(led_platform_init);
* L$ [, I9 `" l ? o8 L" h( Y. Zmodule_exit(led_platform_exit);
9 ^+ x t/ d0 A: X- }' x) G- q2 B. n7 x2 {
MODULE_DESCRIPTION("Led platform driver");: z: {. `4 t" t3 G$ q$ k1 B
MODULE_AUTHOR("Tronlong");
0 i% R+ s1 Z7 RMODULE_LICENSE("GPL");: E D' q( O0 z) w
3 S& m6 F& a1 {( t
|
|