|
|
求大神给下面的程序做注解,请稍详细些,谢谢。
1 }% m. N3 b+ ?% a1 Z5 ~( }3 [#include <linux/init.h>; _; N6 Q' b" {1 Q
#include <linux/module.h>
$ C; q( q0 o; M& u#include <linux/kernel.h>: ` H' D# R! n7 H7 ^' n2 q: k3 N$ w
#include <linux/types.h>
* ?2 Z1 `9 h, M0 e#include <linux/gpio.h>9 X3 a# S/ g$ ^, ?
#include <linux/leds.h>
1 P+ P n( _5 a" u% J# q! s#include <linux/platform_device.h>
) _$ x& p$ t4 A, _! _9 e& P- n. d: W3 Q! m2 u% Q
#include <asm/mach-types.h>
K5 ~ _9 U$ x$ P! Y5 i#include <asm/mach/arch.h>
! @- b$ t& S3 Z$ N' I1 G2 v#include <mach/da8xx.h>" h# L- A$ M$ V
#include <mach/mux.h>
2 Q' ~. h0 n4 ~8 j) d! Z4 Q9 z. ]. p# p `- k7 o* S6 u
#define DA850_USER_LED0 GPIO_TO_PIN(0, 0). E) [; H8 C1 ]' E- d
#define DA850_USER_LED1 GPIO_TO_PIN(0, 5)
6 U' p1 L1 p8 s- e#define DA850_USER_LED2 GPIO_TO_PIN(0, 1)
7 I8 Z' \ {- z/ k2 O#define DA850_USER_LED3 GPIO_TO_PIN(0, 2); Q0 Q, T6 L0 ~7 U
4 [+ ^' e5 g5 g! A/* assign the tl som board LED-GPIOs*/9 D4 m& ~% i p4 j( a
static const short da850_evm_tl_user_led_pins[] = {
& j2 a; R0 P+ O( P /* These pins are definition at <mach/mux.h> file */4 r: T7 K/ _7 `* A
DA850_GPIO0_0, DA850_GPIO0_1, DA850_GPIO0_2, DA850_GPIO0_5,/ U0 [; F$ D0 a) d7 p& R( @
-1% u$ l' {5 g2 B7 C O' q7 M
};
) }; N- s* A0 {. n! c1 v, @8 s% U" ^6 s" ?
static struct gpio_led da850_evm_tl_leds[] = {8 Z$ p) `0 P" M" Q4 _ Y1 x
{1 T3 t: b8 Z6 @: N! Z
.active_low = 0,
+ a2 N! m1 V8 I1 F$ k) I1 `1 J .gpio = DA850_USER_LED0,
( K" b# K. F5 c. l, K. Q .name = "user_led0",
4 I: z4 }8 C/ H .default_trigger = "default-on",
8 T) |8 k+ S# E6 P },! Q% O, b9 B c/ h0 Y
{; b# V/ R% l1 ^- G) j: |7 r3 T2 v
.active_low = 0,2 R. @% n# u& o% x* m
.gpio = DA850_USER_LED1,. ^8 M* S( R5 [$ }8 ^
.name = "user_led1",5 f. H ?3 O# ]6 _9 Y
.default_trigger = "default-on",
1 [. M9 z/ d \5 W; f },! ?: _1 {. u( K) ]
{
% j2 `2 g; b* y- x2 w' s .active_low = 0,
2 ~, A8 P4 N: E5 l* t- ~& `$ |) g& X .gpio = DA850_USER_LED2,
8 e1 i9 L% ^* k7 X .name = "user_led2",# }8 R: `* g8 b+ p
.default_trigger = "default-on",7 s4 L: Q" E% N: X
},
8 b( Z& Z' I+ g% X3 h8 p- { {( ?% f {8 V: h: ?" v9 b! w
.active_low = 0,$ U% q# O9 \# p1 D0 j
.gpio = DA850_USER_LED3,
7 X4 U) ]) Q, |+ ~" i& H2 z2 Q .name = "user_led3",* L+ O$ i3 k2 w' l
.default_trigger = "default-on",
/ z* u/ D) C( _* q9 k5 T9 P },8 X) b- f& b" \5 r2 j
};: T4 r5 n; E# C. o3 H
5 O% m! B( V4 O0 F# i
static struct gpio_led_platform_data da850_evm_tl_leds_pdata = {
+ h' \: [1 F" w) X) r* [ .leds = da850_evm_tl_leds,$ x5 c' N) U- Z t1 ~1 E* \
.num_leds = ARRAY_SIZE(da850_evm_tl_leds),
% [5 y" k( T3 G3 i9 ^0 ^ ~};3 A t4 E' F1 f% z$ `4 ?
( f2 T; P3 R p/ ] ?1 j5 s& N
static void led_dev_release(struct device *dev)
$ v/ u8 @/ @6 g$ ^{
; S: d9 s5 d/ @0 P: c1 i2 T6 Y};! ^1 Q5 Z& r y& O
! Q" k) b7 \8 B5 R l2 ]
static struct platform_device da850_evm_tl_leds_device = {6 @- G' C% E A5 K6 h+ [. @
.name = "leds-gpio",
2 u a. {7 x F .id = 1,, p4 Y! h" U2 F/ l( Y
.dev = {
1 T" p6 | v; ]+ C .platform_data = &da850_evm_tl_leds_pdata,- s: H& Z' n* J. f) ]' Y6 @
.release = led_dev_release,& P$ a" o8 y, l" r7 R
}
( A- l9 K, s2 q. F, w" i. J% |% L' L};
- b" F2 g. D- j! ?# ?5 h; I: b: P$ h' ~) i# L* @* \2 c
static int __init led_platform_init(void)
/ q. t& P2 W; L2 @ R0 G- X2 U. O9 a{
5 t( r5 g2 D" v/ \# X P, c int ret; M8 g; S2 U6 s Z" Y5 h, _2 ^& L
#if 0# Q5 g' i" q: N/ v
ret = davinci_cfg_reg_list(da850_evm_tl_user_led_pins);3 _5 [. U6 y5 e% ], ~& K5 y' B6 }
if (ret)
) f! b( U& d1 T6 m# b5 H+ Z pr_warning("da850_evm_tl_leds_init : User LED mux failed :"
6 B1 p% W& T! }% O4 m: h "%d\n", ret);
3 z0 a9 N* u% ?6 a4 J#endif U! l% C* s' O- D3 E/ W& M
ret = platform_device_register(&da850_evm_tl_leds_device);3 @ ~+ ?5 Y8 N* D* H3 w
if (ret)9 G0 P& C, H7 S% o7 c1 h, h
pr_warning("Could not register som GPIO expander LEDS");
+ M, W, y; o& n2 v else
+ d9 \" B3 b4 o( C4 I printk(KERN_INFO "LED register sucessful!\n");( ^0 j8 ]9 m1 ?
3 |. c4 `2 N2 q! T! S- s
return ret;
6 m. J6 Q1 p/ `' k2 U4 k. P}
" v+ y! o9 W0 L% e, X. A# W& @% R& e5 ?9 G
static void __exit led_platform_exit(void)
4 l4 N* @/ G# l: j a$ s{
% B+ ? H; F! K0 Y/ Y platform_device_unregister(&da850_evm_tl_leds_device);
& {7 ~# ?* ~ T* w* S
+ u8 @( I2 U0 s+ }* L0 o! s6 X printk(KERN_INFO "LED unregister!\n");
4 p$ A& Q- W# ?. ^. L} G7 ]: n$ m3 I+ L) @/ T
2 T W8 r. b' e- l7 z3 C
module_init(led_platform_init); ?/ J, A! j) Q
module_exit(led_platform_exit);
2 x: h% r3 I; v5 u+ C6 B B; |. V/ z' Q1 W, M( j
MODULE_DESCRIPTION("Led platform driver");
4 _2 [% L7 r' o) J. o/ qMODULE_AUTHOR("Tronlong");
) [7 F, D/ B# A9 yMODULE_LICENSE("GPL");4 [; `8 \. L3 L, P, `; s
! {+ S6 F5 [% S4 p1 K |
|