|
|
求大神给下面的程序做注解,请稍详细些,谢谢。2 K, C6 D% F0 p7 s
#include <linux/init.h>
: L C/ }/ i7 O! S3 d( N#include <linux/module.h>( [$ j2 }+ u" y: l+ j+ G
#include <linux/kernel.h>
& M# K6 X# R9 T: \7 f0 e0 o+ K#include <linux/types.h>' C3 [ a$ M0 V" T9 [9 F" c" j
#include <linux/gpio.h>
( b# ]1 t' V5 n9 G) G! L$ E#include <linux/leds.h>
K( y* l3 ~. {#include <linux/platform_device.h>/ `/ Z2 W8 \5 A
; O3 M# X$ u8 v9 V& f6 F#include <asm/mach-types.h>
4 e# l( X% @2 x#include <asm/mach/arch.h>
: w& j, l5 F) S/ D* N2 [. o8 c#include <mach/da8xx.h>
3 w; x* h+ H# U: o3 i: a, q#include <mach/mux.h>* k" A5 r7 I8 r. }/ p9 `% A
8 b7 b5 `: c" a# p
#define DA850_USER_LED0 GPIO_TO_PIN(0, 0)
- Z2 y8 K3 K( {3 J; @, b#define DA850_USER_LED1 GPIO_TO_PIN(0, 5)
0 b J' I( O" q" l3 M; S, q#define DA850_USER_LED2 GPIO_TO_PIN(0, 1)
3 @% w- J- j* j5 ], R+ i" N#define DA850_USER_LED3 GPIO_TO_PIN(0, 2)3 n- \' ~6 L3 k. ?0 L
! w# g" l3 U! G0 s! V/* assign the tl som board LED-GPIOs*/! x/ E; ], w, W( B' \0 k3 O
static const short da850_evm_tl_user_led_pins[] = {' g4 c6 N- D& ?; O( u- \
/* These pins are definition at <mach/mux.h> file */: W; H; }# k4 [. l6 O1 B
DA850_GPIO0_0, DA850_GPIO0_1, DA850_GPIO0_2, DA850_GPIO0_5,
, U5 V* L [% U -18 Y4 R4 G4 h6 M( C9 X) x) c% H4 Q" _
};
% w5 x; t, Q1 a: x$ T
9 R; R7 y0 P1 ~1 c% \0 fstatic struct gpio_led da850_evm_tl_leds[] = {
# w A6 V M7 C8 u2 c) a {) l" k3 u0 N6 y5 o" |
.active_low = 0,! c# V9 A4 K |; m$ Q
.gpio = DA850_USER_LED0,1 u# Z+ g2 P& {# m
.name = "user_led0",. p6 j) c; A3 w9 X- r& _
.default_trigger = "default-on",
( C4 K! o; t N$ F; X }," m6 h$ D, e l$ S7 [0 u& H
{
' U% q* k7 |; x$ G: S3 q) d# R .active_low = 0,& J. O1 O, c5 ^! h
.gpio = DA850_USER_LED1,$ k/ w! r- x5 J6 d
.name = "user_led1",; F; P: f, V3 I1 H% ]5 v
.default_trigger = "default-on",
7 v4 `: b9 w; |6 u },
- U, n6 \2 P% F9 I9 J L3 C {( k' y3 W( p2 t& X5 G |: m' i
.active_low = 0,
" [0 m- H" ^% V% y V8 N3 ?+ [3 R .gpio = DA850_USER_LED2,' `# j% y- u$ G5 w# K% e# Z! B1 d
.name = "user_led2",
8 E4 Z! K! n: f; l .default_trigger = "default-on",. ~5 Y! f% ] E6 y
},
' X# D$ @- a2 g% {9 a+ p {
7 Z/ `3 b' N& o .active_low = 0,
3 q* p* c _+ V" v! A" b% V .gpio = DA850_USER_LED3,
`, h! M4 [& [0 w1 p .name = "user_led3"," _- F* F) e5 a" S( j( Q
.default_trigger = "default-on",
5 X1 G1 a% b# [5 z2 } }," X: C: N' k, C6 G8 S- D5 b2 T) G
};- J9 L7 `5 Q; N3 U8 o
+ s+ B4 U5 M2 O+ _! ystatic struct gpio_led_platform_data da850_evm_tl_leds_pdata = {
4 P4 ? H" m$ F. q" o .leds = da850_evm_tl_leds,. P4 U* }( f; v9 N6 D
.num_leds = ARRAY_SIZE(da850_evm_tl_leds),, a& y4 [1 g! \6 M
};
" @3 b" T* F9 H0 [5 o$ Q+ h6 T- {& D! g
static void led_dev_release(struct device *dev)
! Z% O O e! M{6 v4 r0 i1 v8 ]- g- H
};: _: X/ ^$ k- J/ ?
# M% I, m. y) C8 y/ w! H: K
static struct platform_device da850_evm_tl_leds_device = {
, x. Y5 y) [( Q' \ .name = "leds-gpio",/ a' f, s9 h! D. k# C8 D% s- K0 ]
.id = 1,3 J% x9 H4 ^7 W8 E! n
.dev = {" r5 i: l& i# i% s+ w
.platform_data = &da850_evm_tl_leds_pdata,6 Z% r% Z5 t# _
.release = led_dev_release,
4 k: K) p5 y" i/ O- _ }
$ x& x4 E! m2 b& q& H* q};
1 I7 Q2 i! k8 Z- b, p q0 A
w$ W- H, p& a t& r& M$ jstatic int __init led_platform_init(void)
" U: Z! o, y3 \/ d: H{2 C' r5 i* M! P3 K7 I. K
int ret;
0 f: z6 O( E2 R3 X9 V#if 0
1 ]+ g- l9 g% K2 L ret = davinci_cfg_reg_list(da850_evm_tl_user_led_pins);
; W: i R/ y9 j4 X q if (ret)
; ~' c: g$ I" j- T5 W pr_warning("da850_evm_tl_leds_init : User LED mux failed :"& U- A, C* `; J5 d( B( h. a
"%d\n", ret);
% Y- H# ^6 q. T1 z#endif
% r# W+ B: }+ d9 d# v4 W( h ret = platform_device_register(&da850_evm_tl_leds_device);8 a, \7 x& J5 x
if (ret)
7 E7 T( \: W, o" X0 _* Q, B- g pr_warning("Could not register som GPIO expander LEDS");6 A) Y2 X1 e. a3 U4 g+ U$ x+ @, o
else2 P7 K4 c" Y/ T; A
printk(KERN_INFO "LED register sucessful!\n");
; {- k L8 v1 |, J4 _# _
3 w' d! L5 y& z8 [8 ^* q% s return ret;
6 ~/ F' i3 G6 D. g1 ^}
! z* U! W/ Y/ u8 j% I
# j: L' _7 y+ L! G! i6 Z- _static void __exit led_platform_exit(void), @0 W" I k( C/ H' G
{
9 U4 k8 M4 z! o; H% f platform_device_unregister(&da850_evm_tl_leds_device);4 m5 R! ^0 r! x1 a; u# h6 r
- f' |# G; I" ]3 |& W1 p: v printk(KERN_INFO "LED unregister!\n");
' ~) k [" p% S+ J}
; H: C8 e3 Q3 Y
) D$ k8 k! o- q! mmodule_init(led_platform_init);
( l4 s3 Z V2 I% S# p: ]7 e5 xmodule_exit(led_platform_exit);- ]5 T* V7 N$ n+ H3 n/ \3 Q4 |% Z
( i- ]& f: W# |/ H: g
MODULE_DESCRIPTION("Led platform driver");
# N1 {; D- ~# b% a" HMODULE_AUTHOR("Tronlong");8 r7 ~$ P) t9 n- d* u. _8 v
MODULE_LICENSE("GPL");/ c/ p: t; l/ G. {( P+ O, q
+ P# H: `# o# _3 [: U' }% ~- {7 ` |
|