|
|
求大神给下面的程序做注解,请稍详细些,谢谢。# y( O0 D7 q9 C& g) V& R
#include <linux/init.h>* m* n) k" ]& B8 w, G; ?
#include <linux/module.h>8 h/ @9 r( N+ S/ R/ h0 X
#include <linux/kernel.h>
/ z$ }4 S' Q& T1 f/ v% p% T$ j: a#include <linux/types.h>$ z: O' g) X# G) D7 C' L
#include <linux/gpio.h>
, Q& q3 p& y1 u#include <linux/leds.h>$ d! f+ k) j3 v2 d. p6 Y
#include <linux/platform_device.h>2 Z% r& L! T2 d; [, A7 L
. k* I: a5 ~* c* p0 ]
#include <asm/mach-types.h>) x' S- |- s( Y2 t+ w" v
#include <asm/mach/arch.h>8 F3 r A1 k' |: w* X. D
#include <mach/da8xx.h>2 F9 j1 r! O* a' s1 L* i6 l# O2 c2 J# T
#include <mach/mux.h>/ t w# E1 R+ J' h+ r; _
' A/ _6 Z2 h7 D3 b# F- }* W) Y#define DA850_USER_LED0 GPIO_TO_PIN(0, 0)
; y3 d7 |5 E. m9 H5 o4 f#define DA850_USER_LED1 GPIO_TO_PIN(0, 5)
% v: g! D5 ]2 }- t- H r' P; i' A3 V9 m#define DA850_USER_LED2 GPIO_TO_PIN(0, 1)) o8 G, h) @! G* a" p R
#define DA850_USER_LED3 GPIO_TO_PIN(0, 2)
3 ?, d3 w# r7 J0 S" V/ T2 L; `: _% H" T8 G: F* J6 G
/* assign the tl som board LED-GPIOs*/; T6 v, r, i# o/ {1 R: W5 I' Z
static const short da850_evm_tl_user_led_pins[] = {
7 ~7 W# I3 }6 [( a, a# i7 Q; A" g /* These pins are definition at <mach/mux.h> file */2 V% q2 r7 S6 r5 _; r
DA850_GPIO0_0, DA850_GPIO0_1, DA850_GPIO0_2, DA850_GPIO0_5,
) ` |! f" \3 b" [, f1 W8 R, | -13 f4 a+ U: x/ x
};* F+ N! M5 j+ ]6 n6 |; r
$ ~- ]; {0 y) M& \4 Y7 Gstatic struct gpio_led da850_evm_tl_leds[] = {8 P: Z9 v+ m4 V
{5 z! X; k' w8 q4 E8 e4 N- U0 D
.active_low = 0,/ f" t, X4 l1 u+ S6 H1 |
.gpio = DA850_USER_LED0,7 z8 h9 Y8 T, O H) d1 S
.name = "user_led0",0 S+ j" D' q5 x+ x
.default_trigger = "default-on",0 g! f: s- S! b# f8 s2 Y! i# ^
},
4 p/ j- u9 Y& p) a& H {
' F5 O6 A8 I4 k j3 E% o .active_low = 0,
; c4 _8 R5 C3 f) q$ u ? .gpio = DA850_USER_LED1,
* m2 i8 S& P4 j4 C# a .name = "user_led1",7 N& r) e n X: T2 f; k
.default_trigger = "default-on",
# E0 [% l7 s( P( g },0 b4 N. R' s( Z: P$ V& ]( s1 {: t
{
$ C* _% s B; B1 F .active_low = 0,
' g7 p7 D3 e9 a& _( j- `+ K k) o .gpio = DA850_USER_LED2,9 O2 L$ x% Z9 ^% G/ g8 o; f" f: m
.name = "user_led2",
T$ F0 w% `5 p$ K# R9 B .default_trigger = "default-on",/ g( Z+ g0 K9 b
},8 X$ i8 b5 h5 N9 h
{" @' K. ?) ^) r4 Y0 l7 C w
.active_low = 0,
6 w5 [; X; o+ [1 A1 T6 X& {! y7 i& Q .gpio = DA850_USER_LED3,
/ F" g0 P" ?5 L3 j5 n# v7 h .name = "user_led3", l4 r4 s' F, N& P# P3 ?
.default_trigger = "default-on",+ }& I4 ]4 s- L# x9 \
},
' P+ b2 l7 g0 p4 R};+ a) @) r. Q9 |3 I' w0 \8 ^
# A4 b, `5 J3 N- E; k0 j8 J$ ?* Astatic struct gpio_led_platform_data da850_evm_tl_leds_pdata = {
6 t: n5 X7 m8 g/ L/ ~ .leds = da850_evm_tl_leds,
0 r, o$ ?4 V# R2 b; t .num_leds = ARRAY_SIZE(da850_evm_tl_leds),
9 \' Z+ v- w0 J, Y# R};8 \5 V* z& |5 ]3 H, o
" {- E; J1 {! M4 }; @
static void led_dev_release(struct device *dev)
6 _( t, o6 i' U4 f5 A; A, U9 R{* P% _, K( H% c5 ^# N
};$ l4 R. s/ L2 m
. m* p _ ^! T) K! Bstatic struct platform_device da850_evm_tl_leds_device = {2 n1 C5 t! B- h! O
.name = "leds-gpio",
! \0 s' j7 K2 ? .id = 1,
! C/ t! k" n8 K7 k5 \ .dev = {9 _( n- w: _1 H& d. o) `6 P
.platform_data = &da850_evm_tl_leds_pdata,6 a# u/ G% r, B
.release = led_dev_release, W/ w2 |/ C- z- Z1 v
}% _+ v; A* ?8 W& L4 a
};: \/ @# N5 l* K/ w: t" e
5 W: ^2 o2 J8 S
static int __init led_platform_init(void)
4 ~& z. E' ]9 V7 C7 k/ T0 m{
4 F! A+ _" v8 o2 b int ret;
/ f( i4 M& |/ g, o#if 0% s, Z& K6 }% s. B! I. V+ H
ret = davinci_cfg_reg_list(da850_evm_tl_user_led_pins);
: L# v D+ e1 K; h if (ret)
+ v: ~; Y7 \- q! Z! p pr_warning("da850_evm_tl_leds_init : User LED mux failed :"
/ P# ^) @, F* {: U$ y "%d\n", ret);
& O, [9 L% C3 K, Q#endif" M6 b# R v% Q1 p; K7 K
ret = platform_device_register(&da850_evm_tl_leds_device);1 L! l9 R6 ^. J; w9 i4 i
if (ret)
6 ~' g+ [ f9 ?) J6 d' X( O/ V pr_warning("Could not register som GPIO expander LEDS");
+ D$ @* s5 c5 n% q( C& ~4 j7 r else
. L+ d2 t# c; f printk(KERN_INFO "LED register sucessful!\n");3 v) q" @! V% v+ e1 M- K+ \; {
( }% W: @/ G8 c# ^* ]
return ret;
/ _# H- W ^+ h" c c" k}
+ W7 h, z: |( F2 B
; @8 k9 v e) F7 lstatic void __exit led_platform_exit(void)
" g: G9 m) M+ e{
5 V+ _* B* b- U3 X. M) j platform_device_unregister(&da850_evm_tl_leds_device);2 P& v- U! y6 k0 I; f1 }
3 Q7 j# h+ O# q
printk(KERN_INFO "LED unregister!\n");
$ F, o: L7 w# I}
7 [4 a1 }" A! e5 k& H* l/ h: _; Q9 W7 c, z# m
module_init(led_platform_init);
+ Z2 J( A. f& g& W8 ?module_exit(led_platform_exit);+ Y0 M4 O7 z$ {1 H- }
. [0 |- I) D( m9 M( ` oMODULE_DESCRIPTION("Led platform driver");/ y$ Q- X h/ r! f3 `
MODULE_AUTHOR("Tronlong");
( n: }3 S# n. s0 J' r8 g3 Q6 D9 h* mMODULE_LICENSE("GPL");. u6 k& s& x8 z, `) _
l s8 D M! h: x% [ |
|