|
|
求大神给下面的程序做注解,请稍详细些,谢谢。
8 ~! T1 t9 O# B4 I4 X#include <linux/init.h>, q$ j% h1 x9 J; d9 z; C2 w1 a
#include <linux/module.h>- }1 ?9 z3 `. B, B( _# A) Q
#include <linux/kernel.h>
) D) C5 G( l/ N4 n- p/ D4 h5 f! L#include <linux/types.h>
7 H+ U3 L! f. W; D& B! x#include <linux/gpio.h>
1 e- d g6 W7 y* e9 u5 i#include <linux/leds.h>3 n4 l% X) Y' a0 A
#include <linux/platform_device.h>
: f* m; K6 W) r) h5 }% }" {6 y' e3 }* A9 D
#include <asm/mach-types.h>4 r3 O7 _9 Z1 ~9 x
#include <asm/mach/arch.h>! ]- e2 H0 C# Y* z
#include <mach/da8xx.h>& [( q, g' c" U2 V& ?' y
#include <mach/mux.h>
; c* R9 ~3 \( A1 a5 |; f+ e: Y5 l& D
#define DA850_USER_LED0 GPIO_TO_PIN(0, 0)
) ]/ W8 Z0 |( P5 t#define DA850_USER_LED1 GPIO_TO_PIN(0, 5)
0 b% w4 o% I1 ]* Q u#define DA850_USER_LED2 GPIO_TO_PIN(0, 1)$ l, S, w ], X/ D4 ]/ g4 B
#define DA850_USER_LED3 GPIO_TO_PIN(0, 2)
- D; D! l+ ]9 z3 S
) R$ W9 T7 B9 c" P% e3 j/* assign the tl som board LED-GPIOs*/. ~9 Y' V4 W' J# C% \
static const short da850_evm_tl_user_led_pins[] = {
5 r1 X ^. J3 Z0 G4 U3 ]( Q* w /* These pins are definition at <mach/mux.h> file */
# |1 F# z, F/ g6 Y+ e ` DA850_GPIO0_0, DA850_GPIO0_1, DA850_GPIO0_2, DA850_GPIO0_5,# C; V2 [! m( y }3 R
-1
. i$ k- z1 v) @( ]1 A};
4 N6 n, g6 r: C, q9 ^9 t1 p; n S
2 ]5 O. |. X' h: _0 X$ l; E8 ?( Xstatic struct gpio_led da850_evm_tl_leds[] = {5 h3 y x& q% U: {
{
- ]0 W, P8 K& b7 W* H4 X% C+ y" h .active_low = 0,
/ j& N: [" p" p& k .gpio = DA850_USER_LED0,2 d/ N0 k: n9 d2 I
.name = "user_led0",* ^- a2 j% l2 T
.default_trigger = "default-on",
( J( L5 P6 C* E },: j5 u' d) g+ c7 Q# I& M* p
{* }4 i ]2 n j, a+ s" \0 |9 C9 T3 u
.active_low = 0,
+ e. d% B, j- S. k" p, r .gpio = DA850_USER_LED1,) p! p+ c' `! D& u$ s* q' A& ]$ C' y
.name = "user_led1",
( T+ N# g/ ?4 @% @4 R .default_trigger = "default-on",5 J( h$ c: T' ?
},( e" K7 F4 f( g9 R8 q! C/ f; b
{
; p7 k6 ^! W1 q .active_low = 0,5 ~7 B! R5 \9 w$ L3 J# @
.gpio = DA850_USER_LED2,
' D* S; q" e% u4 k/ D, }/ P6 m .name = "user_led2",
4 |' _ G* J% Z0 q+ G! m- C6 I .default_trigger = "default-on",
* O: W" }+ Q+ |3 p- H },
* v( P6 _) I/ Y3 I% e {
: o- f7 e% S2 R, Y7 R) M$ F .active_low = 0,
/ z2 g3 ^! K3 c( X .gpio = DA850_USER_LED3,) @! F* M, G- t# x: S/ K6 @* J
.name = "user_led3",
( I4 e9 _0 c B0 }, h# o$ W0 ], b .default_trigger = "default-on",
) \4 f( S0 |" W6 P },
2 b: E V( Z7 h- F& d};9 C" t1 H' x2 C& ]
. N6 \2 P% Y/ H6 A+ E9 C2 T: rstatic struct gpio_led_platform_data da850_evm_tl_leds_pdata = {4 r& _- P2 f( K$ L! c
.leds = da850_evm_tl_leds,4 e# g% ]' U* l+ N4 j2 o! D2 f
.num_leds = ARRAY_SIZE(da850_evm_tl_leds),* |4 l( D ~$ ]; ]
};$ a/ G+ ~/ U T3 @! e/ z
8 ^/ S% r% k- M; a( l$ z
static void led_dev_release(struct device *dev)
3 k5 k) D, ] I2 p. Z; G{/ u" @6 G# M1 s
};
* L3 q! l2 o. C$ N4 `
/ l$ d, B& v# U0 `" sstatic struct platform_device da850_evm_tl_leds_device = {
# v) t0 e4 ^* m .name = "leds-gpio",
K1 l7 s% M( k$ L5 [8 ? .id = 1,- f Q- M9 T6 a% y
.dev = {% k) t( m$ j( F) p! h* |
.platform_data = &da850_evm_tl_leds_pdata,
7 `8 g" l0 ]4 U1 i3 Q; v% r. ^0 C .release = led_dev_release,. ~7 x g# i0 e0 W) X+ S- g
}- P7 b8 m& G: Q3 h
};
/ e: H3 T7 V% I0 H
' l+ s+ V' h: A" K$ e Tstatic int __init led_platform_init(void)$ d* P X0 ^/ T
{5 l# k- m$ b/ M3 s
int ret;/ I% Z5 V: K I, i5 N$ }) O
#if 0& @6 i& c! X7 r$ R% Q* G. l5 y# W
ret = davinci_cfg_reg_list(da850_evm_tl_user_led_pins);2 k: t, j+ l4 v) o8 u& {
if (ret)/ _8 U, k& w/ F- j
pr_warning("da850_evm_tl_leds_init : User LED mux failed :"3 G' ~$ ^% x! F9 G- K
"%d\n", ret);' T [2 m1 `( k; B- B9 \ Q$ G
#endif
! T+ t0 D9 a' V) [$ S ret = platform_device_register(&da850_evm_tl_leds_device);
L! K u3 Y. _5 w if (ret)# b! v! L- V( V5 N& v7 k! T+ _
pr_warning("Could not register som GPIO expander LEDS");
2 S( a$ n3 K5 ] O, w; s( ~ else
: W8 L5 Q: T# M5 y. ~# d printk(KERN_INFO "LED register sucessful!\n");
2 _1 F$ d( D! y% t- [ S
' T3 y S7 x, i4 G3 X# N3 l' z return ret;
8 K, \9 n) q; l5 g5 u3 Q7 w}
8 Z" q; F/ k; S, L8 [+ v" `
) a4 |% a; f" \- p, Ostatic void __exit led_platform_exit(void)
g: r1 w/ _9 @! \2 N- A{
5 b3 k5 p* y* I5 z- _ platform_device_unregister(&da850_evm_tl_leds_device);
$ W" o' q' I0 X2 a
+ O1 K7 N1 H/ M% z( Q* i/ ?. I i printk(KERN_INFO "LED unregister!\n");
6 M; c7 c ~7 d/ G3 q} s3 d: B- D7 b+ h# n( b! K" k& t$ w4 ]
& H5 W% g4 s# Y7 n5 E. a
module_init(led_platform_init);) e# s+ t) r+ ^* d# |! R9 n
module_exit(led_platform_exit);* t: M2 ?/ A' |8 e1 [
9 L* O' ] P, j! t3 k' XMODULE_DESCRIPTION("Led platform driver");
" L1 ^9 @- ?* ~, c+ @" \0 ?4 ^MODULE_AUTHOR("Tronlong");
' R2 h, a1 R6 T6 eMODULE_LICENSE("GPL");
" T* b; o. }2 q7 ~5 h. G8 f+ n4 F- U/ D; F" }' I O. I5 ~* `7 Y7 {" n! G1 R8 g
|
|