|
|
求大神给下面的程序做注解,请稍详细些,谢谢。& \9 G% W' h0 D
#include <linux/init.h>
2 M M! S, V% O' b1 ]4 Z. i+ ]#include <linux/module.h>2 m& ?7 m: C# s2 @0 z1 }$ S
#include <linux/kernel.h>
9 V" u1 k2 }: ?, u#include <linux/types.h>/ ]3 z2 v0 w9 L( \; J" N+ X
#include <linux/gpio.h>
5 K6 x( S! Z' ]! q: P6 g" A#include <linux/leds.h>- b. N; y% O2 Q7 y' P* W* S$ B0 e; Y
#include <linux/platform_device.h>! s6 c0 w/ S3 T; _( D/ `
3 c' f0 e+ m. D" \* S J
#include <asm/mach-types.h>
) e, S7 O8 ]' S& _+ j#include <asm/mach/arch.h>! k! d6 {6 w' [. l0 h
#include <mach/da8xx.h>
7 }4 ?5 ~, X( z5 k4 Y( p9 @# u#include <mach/mux.h>2 N5 v) Q( b1 M' w
* k+ H* j: o8 Z
#define DA850_USER_LED0 GPIO_TO_PIN(0, 0)7 _/ W4 T1 G, o& v
#define DA850_USER_LED1 GPIO_TO_PIN(0, 5)
# }$ n, i, I0 r: T; G( H$ T#define DA850_USER_LED2 GPIO_TO_PIN(0, 1)
7 Q9 B* t0 F) W# ^+ }#define DA850_USER_LED3 GPIO_TO_PIN(0, 2)6 ~; Y0 O9 b6 L) j: b! O
0 J( q, y' B! V6 |/* assign the tl som board LED-GPIOs*/
! f5 b, e, Z0 r3 sstatic const short da850_evm_tl_user_led_pins[] = {$ B+ G; @0 K! c! v5 O
/* These pins are definition at <mach/mux.h> file */
+ i3 E) Y+ h3 J7 k& O9 q DA850_GPIO0_0, DA850_GPIO0_1, DA850_GPIO0_2, DA850_GPIO0_5,/ X- L! X/ G) c: e5 I
-1
9 q* \4 I, w8 O% W' E# c' J};. v- q! x# Z) O9 T& E: D
0 s q: `' M0 S) ^4 Z
static struct gpio_led da850_evm_tl_leds[] = {
2 J/ x4 N* j( Q$ ` {
# O9 P3 E' L) P! z/ C1 h .active_low = 0,6 T+ h+ r `& @2 \8 V. D, }
.gpio = DA850_USER_LED0,
9 E# k8 j- ]8 ^1 {- C$ o b7 f .name = "user_led0",
. d$ R k, t6 D( w& Y2 F) i+ f1 ` .default_trigger = "default-on",3 @, ?( r# |, y9 `, V
},! o6 y0 A+ F+ q6 u9 c8 h
{
0 v7 s& w/ I& |7 ` .active_low = 0,
$ w9 {5 N" }" o; A0 J2 y+ V+ D .gpio = DA850_USER_LED1," ~% x9 |& a, E9 D6 S5 e# C
.name = "user_led1",/ T8 B$ T6 K) D ]' F, D
.default_trigger = "default-on",
/ N* m* ^2 P& m( |4 P) N% _ },
9 _, W) e1 V; D {
1 m9 G A' j7 k& l+ P5 h .active_low = 0,
" B0 K6 p& S/ W- S .gpio = DA850_USER_LED2," e7 \" F* I8 k
.name = "user_led2",
& L: i, r$ e3 b; I) C .default_trigger = "default-on",! u2 {0 B$ F( ]" i0 o' d2 |# W
},1 J' O8 R. j/ i- ?8 t
{5 t+ [4 a6 E# e, |$ g! m
.active_low = 0,
^$ U' l; Y" J' s .gpio = DA850_USER_LED3,
% R( Q4 R( ?7 E& C& E( n .name = "user_led3",
+ P3 _ l+ F( A .default_trigger = "default-on",
4 `( s ~" g9 T, ~& G },. b6 ]; s4 I9 J& U; r# u6 [" |- Z
};
* ^/ P! y, H% j7 G5 g3 X% Q5 O) V2 A( m' m7 T0 d
static struct gpio_led_platform_data da850_evm_tl_leds_pdata = {
/ ]) f) `: E6 B( E* t; x .leds = da850_evm_tl_leds,
& P' v& V* x9 m7 Z! R" E. o2 K6 p6 a% e .num_leds = ARRAY_SIZE(da850_evm_tl_leds),
* U. i6 K5 s' q9 V7 H1 k4 b};
( X6 F! ~% `* y( T/ C( A: K5 o- U& O; X
static void led_dev_release(struct device *dev)
( m o# w/ O& N2 _4 N0 _ y" P8 G{/ @. t0 W0 K+ u1 L2 o
};( Y H2 W* e. P" \
- {7 e) s- H! J0 I& z2 @' y
static struct platform_device da850_evm_tl_leds_device = {
6 a% s0 ]& z4 f" f w .name = "leds-gpio",
! N9 u# ?$ ~, e .id = 1,- C* K |4 k: i
.dev = {
# h/ a- R- c; s5 Y .platform_data = &da850_evm_tl_leds_pdata,
- r1 c" d: K n& j4 k1 H3 |7 { .release = led_dev_release,8 z/ t# ]* A* Q) U/ @1 \
}
; ^; ~" O. y+ t \};
$ D6 w1 j% r: O( r# D: f- v1 F1 G+ I8 h+ R
static int __init led_platform_init(void)" u, G$ u6 y- C! l+ X( D5 @+ d1 D
{
T3 q# h8 D( b, Q- A5 p) c. T, @ int ret;& {9 K2 Z- I0 i+ G! D' C
#if 0
# E6 p7 a$ G. W ret = davinci_cfg_reg_list(da850_evm_tl_user_led_pins);4 P4 H! A6 {) o! w9 d4 {6 O' q
if (ret): D' n5 f6 x3 S2 y$ x! l
pr_warning("da850_evm_tl_leds_init : User LED mux failed :"& F% n L/ v1 K
"%d\n", ret);% N3 C& j6 Z$ t1 C- C, t
#endif
7 U3 j) v( O. `; \ ret = platform_device_register(&da850_evm_tl_leds_device);, X" O( K- D. d. n {0 ?
if (ret)
0 {, \0 H0 \3 p* k" K pr_warning("Could not register som GPIO expander LEDS");
" |; }; b; K) `4 G! ], G6 K) G5 O% F else8 G3 \' M3 |* y
printk(KERN_INFO "LED register sucessful!\n");; w. w, W+ O$ F' Q
8 f2 j4 E7 r/ H+ o# ]% D! f$ y
return ret;
: @0 N) s# p B# d/ W! q}- w4 W3 X5 x/ n4 A
( K: ?4 H# ]) K. u; A! cstatic void __exit led_platform_exit(void)4 \5 l+ e/ `1 i" ^" J+ W( B
{$ \. l; i8 w+ i, J3 N4 e( o \' S
platform_device_unregister(&da850_evm_tl_leds_device);
5 _% O0 \$ B8 I* D/ ^4 E2 N9 W5 Y- A( G" ?
printk(KERN_INFO "LED unregister!\n");( C/ z" R& W9 S9 P* v
}
- e% @ {- a/ v8 f- d3 O0 l& x8 d2 e+ Q1 t/ V4 {
module_init(led_platform_init);% C2 k! q; o2 }: f( u
module_exit(led_platform_exit);" \ m+ u8 ~1 B: v t
* ^1 O1 @ G2 |3 L# u1 l
MODULE_DESCRIPTION("Led platform driver");6 w- w. n; `, z x) H8 \
MODULE_AUTHOR("Tronlong");
7 v- h$ R4 l$ V( [/ U( [MODULE_LICENSE("GPL");/ w" R7 G% ~2 S: B* {, {7 I& U7 H
% w4 l+ M' b9 b |
|