|
|
求大神给下面的程序做注解,请稍详细些,谢谢。
7 o3 ^5 j7 e- L. v1 ?- S$ F" g5 z# P#include <linux/init.h>
5 m r+ ^4 q! z; o) e9 q2 H#include <linux/module.h>
1 k" j# j: W3 E9 H#include <linux/kernel.h>8 H" Q$ ?7 b9 Y! K0 I4 S
#include <linux/types.h>
$ B0 d5 Q3 o' S' h7 w6 p#include <linux/gpio.h>. O$ t! I1 L& [# |6 {- a$ r# d+ [
#include <linux/leds.h>8 @4 U5 s) \; f, n/ k j, H
#include <linux/platform_device.h>; e( m" [( o: O/ x) R; `2 Z1 m
+ C7 ]1 x6 j' S1 D#include <asm/mach-types.h>) i- w! J7 |. {7 h
#include <asm/mach/arch.h>
, ?. c+ v0 i, T& Y5 U6 K#include <mach/da8xx.h>
& y3 p' T$ z: _2 P+ G#include <mach/mux.h>
: R- H! `* k2 n( S) \* `6 H
" ?& V1 G+ y7 e#define DA850_USER_LED0 GPIO_TO_PIN(0, 0)
3 r+ z* |2 `! T' r$ A s! }! _#define DA850_USER_LED1 GPIO_TO_PIN(0, 5)
^: u- F6 [' G#define DA850_USER_LED2 GPIO_TO_PIN(0, 1)
( J" g& q5 u7 J. h/ D3 |6 V1 U& g#define DA850_USER_LED3 GPIO_TO_PIN(0, 2)7 Q+ o S4 C9 i1 L
- I' h e- f7 m7 L2 g
/* assign the tl som board LED-GPIOs*/& T, s" Q: L4 z$ \5 z% t7 t2 i
static const short da850_evm_tl_user_led_pins[] = {2 L# @" l5 X- `& A+ Z m6 n
/* These pins are definition at <mach/mux.h> file */% M9 _& d" |' @0 W: p1 B
DA850_GPIO0_0, DA850_GPIO0_1, DA850_GPIO0_2, DA850_GPIO0_5,# K% I; ^! H3 \7 W$ ~* m
-1
7 J) o! p1 A# c6 q. [};( D% o1 O6 D1 y$ F4 i
# H% ^$ D5 c9 p1 V1 M' m7 {
static struct gpio_led da850_evm_tl_leds[] = {* W3 f) J2 O, \
{
) N' d. ?, w! R; @6 H8 `* q4 h! L7 i .active_low = 0,* d& w3 a3 g3 h" a& a
.gpio = DA850_USER_LED0,
% r6 ^6 p# N% V) M .name = "user_led0",
1 r! O& x% |$ H5 L! d- F .default_trigger = "default-on",
6 p9 q% R, C6 L. j$ P9 U$ p },
9 P8 \- w" z. N+ G8 I4 S7 _6 v0 I {
& C' |4 W- N6 V" u/ H .active_low = 0,
3 R% F- T9 h8 {9 X .gpio = DA850_USER_LED1,
8 G2 b( f' f/ W D3 {7 f+ H .name = "user_led1",
2 }# q; d" d8 z+ l- ? .default_trigger = "default-on", a, Z# Q9 D: G; Q
},
& @+ c* u+ @0 j: c. {! n/ p: H& x q {
& d9 A6 x" O) T( ^6 ]7 T/ P .active_low = 0,2 D9 z1 j6 T, E3 t% j3 L
.gpio = DA850_USER_LED2,) j! E- h# D; x4 j5 H5 ]
.name = "user_led2",
0 t3 |0 b$ V# O( m( M; o5 `9 S/ f .default_trigger = "default-on",
! C: ~7 l* @' Q2 k# K },
( v4 s1 |4 Q+ m {
. Y. X4 S& s5 }* g0 J& Y; M: F .active_low = 0,
" c! ^9 F: N, v .gpio = DA850_USER_LED3, E- [& x6 L9 j* c4 A+ z
.name = "user_led3",
* X) Q8 O* u1 k' E; v' i" ? .default_trigger = "default-on",
5 Y; V" b7 ?: p9 @ },: u& q L4 }7 n- O; V7 J& L! q' Q
};
9 R" [- z( x( q4 W% X) K" E; l5 b
static struct gpio_led_platform_data da850_evm_tl_leds_pdata = {
. I! M9 h$ U; V7 P, w4 v .leds = da850_evm_tl_leds,
1 W3 g; x' v5 q, j R .num_leds = ARRAY_SIZE(da850_evm_tl_leds),! Z8 ?) }0 ^: C/ G- b
};5 b& j: E4 e( g
0 r8 @0 V; W+ i Y0 F5 t2 Kstatic void led_dev_release(struct device *dev)
7 ] o: a8 K' W{& Y8 O, r/ @: i8 ~' k
};2 L8 g$ L8 L4 {" j
. O" `. H. K, Q; ^& k6 Estatic struct platform_device da850_evm_tl_leds_device = {) o& Y. ]0 J3 e+ a. o0 ]- W
.name = "leds-gpio",6 t. c' w# R, T! I6 a
.id = 1,
3 t) o+ d+ X6 Z* | .dev = {
1 a: e7 G i. j! v K* G9 K$ V$ Q$ \ .platform_data = &da850_evm_tl_leds_pdata,
! o9 a" s) W+ } Y7 ` q .release = led_dev_release,
2 Q. j- d* P! Y! U }
# t( ^- \2 @$ g5 [0 L6 ]};
$ t& z2 @+ U; P$ X2 J' ?* W9 U" e- G) `& T7 W, b
static int __init led_platform_init(void)' j; T* U3 m# l( f0 `7 A( [0 t
{
9 H2 D8 D6 R3 L6 l int ret;
% z0 J) _# H+ h9 k#if 0+ }5 C# h/ ?7 O- _% X7 X
ret = davinci_cfg_reg_list(da850_evm_tl_user_led_pins);4 _0 T1 O S1 w* y9 R! f" h
if (ret)
! \; C: P* f5 b3 l' q& [ pr_warning("da850_evm_tl_leds_init : User LED mux failed :"% [) o9 M1 T# i$ Q4 {
"%d\n", ret);
) P- N6 g: ~, Y% h/ q0 K( _: Y#endif
, ^( C7 ^3 s/ H9 } j$ E- Y ret = platform_device_register(&da850_evm_tl_leds_device);$ G& V" u& R5 l8 t9 b) s1 _
if (ret)/ i6 u; i; I1 o9 M' d; Y
pr_warning("Could not register som GPIO expander LEDS");
- m+ f' G: _, _+ P" f else
# n6 Z% L& n& D" V( ` printk(KERN_INFO "LED register sucessful!\n");! O9 N$ ^# r5 b: A% a
# i$ X: E7 Y3 O7 _5 r return ret;8 I- y& E* e$ d
}
0 Y9 [! ]& a9 [6 l, V
& g$ v y2 O# O% f- L2 Q% `8 R" istatic void __exit led_platform_exit(void)7 \. E( F* u7 R: c0 ^% g& f# [
{
7 b3 X( _: D$ @2 y, n+ I' L1 V platform_device_unregister(&da850_evm_tl_leds_device);
+ z5 g9 }6 ]& G7 F2 S1 C2 {; F) U# P3 a5 s6 e
printk(KERN_INFO "LED unregister!\n");
$ Z: P7 }+ |( n7 Q) J E}
( a) M8 A. \: I1 c# p! n3 B6 G c/ v$ {
module_init(led_platform_init);
# p, c% n* h3 [module_exit(led_platform_exit);, v/ q7 x4 p/ Z% O
3 p- i' ?' F" LMODULE_DESCRIPTION("Led platform driver");
( u* h8 e/ J. y/ j2 z9 EMODULE_AUTHOR("Tronlong");& F0 C# \* A0 q* q3 D' k
MODULE_LICENSE("GPL");, w5 o! O1 e- ?( a1 m! |
# e8 M1 P* Z B0 F; u6 `
|
|