|
|
@@ -18,6 +18,13 @@
|
|
|
#define CLASS_NAME "myname_class"
|
|
|
#define BUFFER_SIZE 1024
|
|
|
|
|
|
+
|
|
|
+#define SWITCH_ID0 0xFD6D0A40
|
|
|
+#define SWITCH_ID1 0xFD6D0A50
|
|
|
+#define SWITCH_ID2 0xFD6D0B20
|
|
|
+#define SWITCH_ID3 0xFD6D0B30
|
|
|
+#define SWITCH_ID4 0xFD6D0B40
|
|
|
+
|
|
|
// 可以通过模块参数指定主设备号和次设备号
|
|
|
static int myname_major = 56; // 默认主设备号
|
|
|
static int myname_minor = 130; // 默认次设备号
|
|
|
@@ -44,6 +51,13 @@ struct myname_dev
|
|
|
|
|
|
static struct myname_dev *dev = NULL;
|
|
|
|
|
|
+unsigned int myname_readl(unsigned int addr)
|
|
|
+{
|
|
|
+ void __iomem *reg_base = NULL;
|
|
|
+ reg_base = ioremap(addr, 0x1000);
|
|
|
+ return readl(reg_base);
|
|
|
+}
|
|
|
+
|
|
|
static void delay_work_func(struct work_struct *work)
|
|
|
{
|
|
|
printk(KERN_ERR "delay_work_func\n");
|
|
|
@@ -177,6 +191,13 @@ int get_board_id(void)
|
|
|
{
|
|
|
unsigned int board_id = 0;
|
|
|
|
|
|
+ board_id |= (myname_readl(SWITCH_ID0)&0x02) >> 1;
|
|
|
+ board_id |= myname_readl(SWITCH_ID1)&0x02;
|
|
|
+ board_id |= (myname_readl(SWITCH_ID2)&0x02) << 1;
|
|
|
+ board_id |= (myname_readl(SWITCH_ID3)%0x02) << 2;
|
|
|
+ board_id |= (myname_readl(SWITCH_ID4)%0x02) << 3;
|
|
|
+ printk("board_id=%08x\n", board_id);
|
|
|
+
|
|
|
if(board_id > 15)
|
|
|
{
|
|
|
printk(KERN_ERR "myname: Invalid board_id\n");
|