|
|
求大神给下面的程序做注解,请稍详细些,谢谢。
/ b: B- e7 x- ^, e2 {#include <linux/init.h>, R1 `0 k' m3 H7 [0 w Q, @# i
#include <linux/module.h>
+ w" g$ ?/ c4 B J0 N4 Q" B#include <linux/kernel.h>$ p1 v2 `9 _0 L6 N+ i1 y* b
#include <linux/types.h>
. ^- ~! X) L- R1 z2 h" R- ?#include <linux/gpio.h>
, J: j, v. N2 L. P1 E: v n#include <linux/leds.h>
" I5 m! s* v7 _ N" t$ ^#include <linux/platform_device.h>6 k/ ^. [- m$ s
# d% C& K5 e8 `3 K; Y: ~& j$ y g
#include <asm/mach-types.h>
' h6 h6 q/ l6 H' H1 s" K#include <asm/mach/arch.h>
8 i6 l: L, ]; i7 L6 ~9 D2 \: {$ Q#include <mach/da8xx.h>" l( `$ t+ x( i
#include <mach/mux.h>$ }+ i# @. L) o' g3 |' H
7 W0 m, v( z: W
#define DA850_USER_LED0 GPIO_TO_PIN(0, 0)
R# L4 r' U- j4 }3 k#define DA850_USER_LED1 GPIO_TO_PIN(0, 5)7 q7 ]$ E9 U: s
#define DA850_USER_LED2 GPIO_TO_PIN(0, 1)
& F1 q! m# E) P3 B5 w- k#define DA850_USER_LED3 GPIO_TO_PIN(0, 2)
. j) ?6 C2 F% @) t: |' ~4 X' h0 ~1 A
* H. O* p- ?7 ^# \5 C) N q5 l$ D" C/* assign the tl som board LED-GPIOs*/
' @# {& w' y/ O& Q6 ^/ pstatic const short da850_evm_tl_user_led_pins[] = {
! f0 U) L* `# g. r0 S2 ]6 i /* These pins are definition at <mach/mux.h> file */
, D) z* d: D8 ? DA850_GPIO0_0, DA850_GPIO0_1, DA850_GPIO0_2, DA850_GPIO0_5,
' g# ]( X) A: C; O* ^ -1
" I+ H6 X9 D, W/ Z7 Z& h/ c}; Y) ~, D; r# k% c R
/ v2 x0 H: N, n( Z# U
static struct gpio_led da850_evm_tl_leds[] = {
9 @" a! o7 L+ v( O! G' ?# B {; v) ?$ Y9 W& M3 @% ]: Z9 P& S
.active_low = 0,
* y% l9 f3 A" S e6 |- k+ r) z) e$ D .gpio = DA850_USER_LED0,$ m% Z4 x1 e0 z% v# d
.name = "user_led0",$ g3 @) _* c2 C$ B- Y( |
.default_trigger = "default-on",
& d, B; L5 ]" A! j7 h4 W0 X },9 y% x1 ^# n/ H" {; U
{
+ m5 i+ F/ H" @/ b. L& L .active_low = 0,+ g6 x) t6 m* X) [7 c, V) ?
.gpio = DA850_USER_LED1,& n$ ] S7 B( z7 _$ \; h
.name = "user_led1",
& X. A4 s/ h4 u+ K2 ~ .default_trigger = "default-on",$ p M, @3 u' [
},
1 O3 w3 a, n2 p( o5 d7 C) G P) U {
% [% d( ~$ z5 V: ]8 X .active_low = 0,
C. t5 t8 Z) I5 p* ] .gpio = DA850_USER_LED2,/ _7 r2 O D3 ~3 S% [
.name = "user_led2",# @" ]& ~, g. H/ b" m
.default_trigger = "default-on",
) y m2 H( \1 A: M% o T },6 }8 K) d4 }: u" V# X5 }' v% U
{
; Z, S/ A0 \5 U/ O9 p .active_low = 0,( Y( e) E' D8 `2 U
.gpio = DA850_USER_LED3,1 O+ c4 t L8 O
.name = "user_led3",2 F- p' R0 ]/ r( t B5 ^5 j1 h% x
.default_trigger = "default-on",8 ~# y' j j2 F9 K' _1 F
},
; n0 _2 l* U9 s/ w' I9 ^: t};
9 H5 u! l" {0 \3 N
6 n2 B& W: N( v, Estatic struct gpio_led_platform_data da850_evm_tl_leds_pdata = {
. V* L; w0 x3 D0 K) v .leds = da850_evm_tl_leds,
) n) w. I7 o7 e9 S3 }9 b3 h0 ^ .num_leds = ARRAY_SIZE(da850_evm_tl_leds),
j7 n7 M Z; n+ ^};
7 _8 Y& C! _! D$ p) Q. \4 h
5 f: ]7 G8 Z/ M) f1 o) Jstatic void led_dev_release(struct device *dev)9 i1 `5 C* y8 l E
{( L$ z t& F* L( l
};
$ q- f ?2 M9 a/ i' a) S, n5 Y8 `! ]7 E* L' Y
static struct platform_device da850_evm_tl_leds_device = {
) h1 a& K* s; H# A7 I9 A .name = "leds-gpio",
4 k% v6 u& b5 v .id = 1,9 ]: ]& u. ?7 Z' Y5 |0 O! E; v6 F
.dev = {
8 O* i; {1 r4 Y* x n .platform_data = &da850_evm_tl_leds_pdata,
' g; p+ \1 [5 }% r) l8 y6 s .release = led_dev_release,
" Y9 `4 G2 E0 o) v% V: N }
0 ]+ k5 @9 s! Z$ }* h' {};3 a$ Z( G1 q( K
: V3 `* i! l) k' Hstatic int __init led_platform_init(void)- Q, r6 j' f9 Z3 V" ~ x
{# _9 M9 X D g3 {
int ret;
8 O1 V) d7 A. U8 e& I% t- a#if 0( q- p1 s) T% e
ret = davinci_cfg_reg_list(da850_evm_tl_user_led_pins);. N) F, s( q* H' C) D- O1 _
if (ret)
5 O+ b v0 L: x2 g% w2 c6 ~; E4 n pr_warning("da850_evm_tl_leds_init : User LED mux failed :"6 |$ P; q' Z- j
"%d\n", ret);; X+ s7 k( n- Z- k
#endif
& \' K7 E- q' T; D# u- g* X ret = platform_device_register(&da850_evm_tl_leds_device);9 D+ [ D' a# I9 w3 }5 b4 L) @
if (ret)) c/ S) D) x* @4 }
pr_warning("Could not register som GPIO expander LEDS");5 c$ K' z [1 Y6 e
else2 a1 N9 g8 D' d1 |' a
printk(KERN_INFO "LED register sucessful!\n");
8 ^ Z/ ?' ^! `9 ^' O" K
+ k, @. k: p! ~+ I return ret;
, }2 W/ Z; _" R, I1 u" l, k6 ]5 H} N: a- U, ^2 Z2 w2 M
! G0 A4 |0 M+ a4 S3 Rstatic void __exit led_platform_exit(void)) Y a6 n% M) R$ e+ \9 Y/ {
{( ?2 }: I5 p1 i! {
platform_device_unregister(&da850_evm_tl_leds_device);
) ^+ |) p/ I+ j9 P0 F
& z* y: g: B6 M" Z/ o7 p0 X printk(KERN_INFO "LED unregister!\n");
' j. y( r, x' g' j S# Y, [}' a5 q% T, Z9 q7 t& V% i
; Z* S) x( f3 l7 I$ j% N
module_init(led_platform_init);2 O& R* A6 h S/ ^& @( ?; _. T
module_exit(led_platform_exit);7 ~. M4 p' v7 [& |5 U3 H
7 ^+ U$ _6 S9 U; }! g
MODULE_DESCRIPTION("Led platform driver");8 ~& W- X4 f& P/ A* _7 k
MODULE_AUTHOR("Tronlong");
% o G# N) l# oMODULE_LICENSE("GPL");. `$ L9 J0 h; {1 ^: z, _% r
: v3 D) g: P& ^& f
|
|