目前日期文章:201510 (9)

瀏覽方式: 標題列表 簡短摘要


小王子(中文配音)觀後心得

今天趁有空帶的一家人一同前往電影院欣賞 [小王子]電影中文配音版本。

我覺得一個好的電影可以誘發孩子或是大人去閱讀原著書籍,這次帶孩子去看[小王子]也是基於這個原因。

小王子在一開頭就跟原著一樣,利用兩幅蟒蛇吃掉大象的圖畫來凸顯大人世界的觀感已經失去小孩子的單純與想像。

而電影中的老爺爺,其實就是小王子作者 [安東尼.聖.修伯裡(修玻璃)]的影射

家裡一直都有這本[小王子]的書,這是從員林鎮好書交換時換回來的,但是一直都沒有去看他。

一本連大人都沒有去看的書,小朋友是不會主動去看的。

大人如果先看過書籍後,利用誘導與說書的方式來誘導小孩,才能引起孩子的閱讀動力。

片中小女孩一開始對於媽媽的人生安排是採取完全遵守的方式,就是一切按照媽媽安排的schedule去run就會變成人生勝利組。

但媽媽卻完全沒有考慮到孩子的興趣與意見,這也導致小女孩在參加名校面試時的失利,所以只能採去計劃B。



而其中因為小女孩與隔壁老爺爺之間的相處,也點出了書中所想的[馴服],當一個人被另一個[馴服]時,就會對對方產生感情,而當失去時,就會流淚傷心。



人生就是這樣,如果你與某一個人有非常強烈的情感交流的話,在對方去天國時,當想起過往那些深刻的往事時就會傷心流淚。

有情感交流,就算對方已將不再軀殼裡,在你心中,他還是永遠從在你心裡。就像電影中講的,[很多東西是肉眼看不到的]。

反之,如果完全沒有情感交流,要你流淚也難,因為沒有感情交流,更也沒有被[馴服]。


這是因為最近在人生中發生了很多親朋好友往生,才對於片中的這些話,有如此深刻的感受,祝福那些已經去天國的親朋好友,一路好走。


而在人生中也會遇到很多其他星球的人,這些[愛慕虛榮]、[只愛錢]等等的人,更是考驗 [ 你自己是想成為怎樣的人] 的試驗。

當你決定成為那些人時,就會蒙蔽自己的眼睛,而成為 [ 只相信肉眼看到的東西] 的人,無法洞悉事物的內心。



這部片適合高年級的小朋友與大人觀賞,且要經過大人的事後解說給小朋友了解相關寓意,這樣對於人生體驗還不多的小朋友才會比較了解片中的意思。

片中小王子的紙雕動畫,不只有質感,連狐狸尾巴飄動、小王子圍巾隨風擺動,都製作的很細緻。

而電影後半段小女孩與 [王子先生] 的奇遇,更點出連小王子自己都陷入大人傳統式、填鴨式教育,而失去小孩子時的熱衷、興趣、單純與想像;很讓人省思。


這部電影不譁眾取寵、不搞笑、不打鬧,非常適合靜下來好好觀看。


最後,看完電影後,建議你一定要再看看原著,會有不同的思考與體會。












文章標籤

CuteParrot 發表在 痞客邦 PIXNET 留言(0) 人氣()

某日與孩子學習美術的 [禾雨美術教室] 恐龍老師聊天時,看到美術教室內孩子的拖鞋沒有一個固定的放置位置

於是答應動手施作一個 簡易鞋架 給恐龍老師。

這是材料是採用 松木板,是在特力屋購買回家裁切之後,採用木螺絲固定完成,採用三層設計,應該可以放置15雙小朋友拖鞋。

完工後,用烙鐵焊上紀念商標上去。

目前已經在 [禾雨美術教室] 服役中。

文章標籤

CuteParrot 發表在 痞客邦 PIXNET 留言(0) 人氣()

當我們在 Android 的 AOSP 內,想要編譯一個放置在 tools/external 內的 c 應用程式時

我們必須為這個 c檔案撰寫一個 Android.mk 才能將之編譯成執行檔

而Android.mk 內容參考如下:


--Android.mk---

LOCAL_PATH:= $(call my-dir)

include $(CLEAR_VARS)
LOCAL_MODULE_TAGS := eng
LOCAL_SRC_FILES:=vidtest.c
LOCAL_MODULE:=vidtest1
LOCAL_CPPFLAGS += -DANDROID
LOCAL_SHARED_LIBRARIES:=libc
LOCAL_C_INCLUDES += $(LOCAL_PATH) $(LOCAL_PATH)/$(KERNEL_DIR)/include
include $(BUILD_EXECUTABLE)

-----


將Android.mk 與 c 放置在同一目錄後,先設定環境

.source /build/envsetup.sh

.lunch (選擇專案)

使用 mm 就可以編譯 ,產生的 執行檔會放置在 \out\target\product\msm8992\system\bin\ 內。




文章標籤

CuteParrot 發表在 痞客邦 PIXNET 留言(0) 人氣()


.步驟二:  註冊一個 /dev/video0,並用應用程式去讀取測試
  我們延續上一篇文章中的 v4l2step1.c將之更改為 v4l2step2.c,並對 Makefile作相對應的修改
  將MODULE_NAME  = v4l2step1 改為 MODULE_NAME  = v4l2step2,讓他可以順利 compile成功。
 
  在這邊因為會呼叫到V4L2的 api v4l2_device_register,video_register_device,所以必須要加上必要的 header檔案
  ---
    #include <linux/videodev2.h>
    #include <media/videobuf2-vmalloc.h>
    #include <media/v4l2-device.h>
    #include <media/v4l2-ioctl.h>
    #include <media/v4l2-ctrls.h>
    #include <media/v4l2-fh.h>
    #include <media/v4l2-event.h>
    #include <media/v4l2-common.h>
  ---
  註冊一個 /dev/video0我們需要呼叫 v4l2_device_register 與 video_set_drvdata。
 
  在v4l2_device_register部分,根據函式定義-int v4l2_device_register(struct device *dev, struct v4l2_device *v4l2_dev)
  需要兩個結構,分別為 struct device 與  struct v4l2_device。
  我宣告一個  ar struct來包含這兩個結構如下,
  ---
  struct ar {
      struct v4l2_device v4l2_dev;
      struct video_device vdev;
  };  
  ---
  並宣告一個靜態結構變數 static struct ar ardev;給 v4l2_device_register  使用。
  在 vivi_init函式中宣告兩個 結構指標變數分別指到  video_device 與 v4l2_device 結構
  並給予 v4l2_device結構中 name ,並呼叫函式 v4l2_device_register(NULL, v4l2_dev); 就可以註冊 V4L2 driver了。
 
  接下來要註冊 /dev/video0 device,設定 ar 中 video_device 結構裡的 name ,並將 video_device 結構中v4l2_dev 指到 v4l2_dev 位址
  設定 video_device 結構裡的 fops , ioctl_ops , flags 與 release
 
  其中的 fops必須指到一個 v4l2_file_operations 結構,當應用程式將 /dev/video open , release, ioctl 時會呼叫相對應的函式
  ---
 
  static const struct v4l2_file_operations ar_fops = {
    .owner        = THIS_MODULE,
    .open        = v4l2_fh_open,   // open /dev/video0 will enter here
     .release    = v4l2_fh_release,   // close fd will enter here    
     .unlocked_ioctl    = video_ioctl2,  // need for ioctl
  };
  ---
 
  而其中的 ioctl_ops 則會指到一個 v4l2_ioctl_ops 結構,必須將支援的 ioctl command 函式implement出來。
  舉例當 /dev/video0 被應用程式open後,並下達 VIDIOC_QUERYCAP ioctl指令時,就會呼叫 ar_querycap 函式。
  目前在 ar_querycap 函式我填一些 struct v4l2_capability  需要的東西回去給應用程式。
  ----
    static const struct v4l2_ioctl_ops ar_ioctl_ops = {
        .vidioc_querycap                = ar_querycap,  // ioctl VIDIOC_QUERYCAP will enter here
    };  
  ----
 
  填完 video_device 結構裡的 fops , ioctl_ops , flags 與 release後
  就可以呼叫  video_register_device(&ar->vdev, VFL_TYPE_GRABBER, -1) 跟作業系統註冊一個 /dev/video0了
 
  這邊為了驗證 應用程式與 driver 之間的互動,我寫個一個簡單的 應用程式來驗證,應用程式名稱為 vidtest.c
  完整 source code如下:
  --vidtest.c--
          #include <errno.h>
          #include <fcntl.h>
          #include <linux/videodev2.h>
          #include <stdint.h>
          #include <stdio.h>
          #include <string.h>
          #include <sys/ioctl.h>
          #include <sys/mman.h>
          #include <unistd.h>
          
          static int xioctl(int fd,int request, void *arg)
          {
            int r;
            do r=ioctl(fd,request,arg);
            while(-1 ==r && EINTR == errno);
                
              return r;
          }
          
          
          int print_caps(int fd)
          {
              struct v4l2_capability caps={};
              
              perror("print_caps enter");
              
              if(-1 == xioctl(fd,VIDIOC_QUERYCAP,&caps))
              {
                perror("Querying cap fail");
                return 1;        
              }
              
          printf( "Driver Caps:\n"
                          "  Driver: \"%s\"\n"
                          "  Card: \"%s\"\n"
                          "  Bus: \"%s\"\n"
                          "  Version: %d.%d\n"
                          "  Capabilities: %08x\n",
                          caps.driver,
                          caps.card,
                          caps.bus_info,
                          (caps.version>>16)&&0xff,
                          (caps.version>>24)&&0xff,
                          caps.capabilities);
                          
                          
              perror("print_caps enter");
          
            return 0;    
          }
          
          int main()
          {
              int fd;
              fd=open("/dev/video0",O_RDWR);
              if(fd ==-1)
              {
                    perror("opening video device fail");
                    return 1;
                      
              }
              perror("opening video device success");
              
              if(print_caps(fd))
              {
                  return 1;
              }else{
                  
              }
              perror("close fd");
              close(fd);
              
              return 0;
              
          }  
  -------
  可以用 gcc vidtest.c -o vidtest 去編譯出 vidtest 執行檔。
 
  驗證方式:
  .將 v4l2step2.ko driver 載起來
   Note: 注意,要載入一個/dev/video0 裝置確定 videodev.ko 有載入,因這兩個driver有相依性。
   你可以用 lsmod 確定一下有無  videodev module,如果沒有就是表示你的 ubuntu kernel 在編譯時是將 videodev 設定為 module的
   ===
       mark@R3600:~/v4l2$ lsmod
    Module                  Size  Used by
    videodev               98259  0
    v4l2_compat_ioctl32    17128  1 videodev
    snd_hda_codec_hdmi     32530  1
    ....   
   ===
   這時候有兩個方法讓他載入,第一個方法是重新編譯 kernel( make menuconfig) 將 videodev 設定為 [一定載入]
   第二個方法,則是切換目錄到 cd lib/modules/3.2.0-31-generic/kernel/drivers/media/video/ ,確定有 videodev.ko
   使用指令  sudo modprobe videodev 手動載入他,再用 lsmod 確定一下有無載入 videodev.
 
   
  .檢查 /dev/video0 是否存在,確定是否正確載入 driver.
  .執行 vidtest 會秀出 ioctl VIDIOC_QUERYCAP 結果,如下:
 
  ---result--
       mark@R3600:~/v4l2$ ./vidtest
       opening video device success: Success
       print_caps enter: Success
       Driver Caps:
         Driver: "Mark vivi Drive"
         Card: "Mark test Card"
         Bus: "Mark's Platform"
         Version: 1.0
         Capabilities: 01000001
       print_caps enter: Success
       close fd: Success      
  ------------
 
  完整 v4l2step2.c source code如下
  ---v4l2step2.c---
               
               
             #include <linux/module.h>
             #include <linux/videodev2.h>
             #include <media/videobuf2-vmalloc.h>
             #include <media/v4l2-device.h>
             #include <media/v4l2-ioctl.h>
             #include <media/v4l2-ctrls.h>
             #include <media/v4l2-fh.h>
             #include <media/v4l2-event.h>
             #include <media/v4l2-common.h>
             
             //ar structure include v4l2_device
             struct ar {
                 struct v4l2_device v4l2_dev;
                 struct video_device vdev;
             };
             
             //static ardev var
             static struct ar ardev;
             
             
             
             static int ar_querycap(struct file *file, void  *priv,
                                 struct v4l2_capability *vcap)
             {
                 struct ar *ar = video_drvdata(file);
               /*
               fill
               struct v4l2_capability {
                 __u8    driver[16];
                 __u8    card[32];
                 __u8    bus_info[32];
                 __u32   version;
                 __u32    capabilities;
                 __u32    device_caps;
                 __u32    reserved[3];
               };
               
               */
                 strlcpy(vcap->driver, ar->vdev.name, sizeof(vcap->driver));
                 strlcpy(vcap->card, "Mark test Card", sizeof(vcap->card));
                 strlcpy(vcap->bus_info, "Mark test BUS", sizeof(vcap->bus_info));
                 vcap->capabilities =V4L2_CAP_VIDEO_CAPTURE | V4L2_CAP_READWRITE; // report capabilities
                 
                 printk(KERN_INFO "[mark]%s, %d, \n", __func__,__LINE__);
                 
                 return 0;
             }
             
             
             
             /****************************************************************************
              *
              * Video4Linux Module functions
              *
              ****************************************************************************/
             
             static const struct v4l2_file_operations ar_fops = {
                 .owner        = THIS_MODULE,
                 .open        = v4l2_fh_open,   // open /dev/video0 will enter here
                  .release    = v4l2_fh_release,   // close fd will enter here    
                  .unlocked_ioctl    = video_ioctl2,  // need for ioctl
             
             };
             
             static const struct v4l2_ioctl_ops ar_ioctl_ops = {
                 .vidioc_querycap                = ar_querycap,  // ioctl VIDIOC_QUERYCAP will enter here
             };
             
             
             static int __init vivi_init(void)
             {    
                 struct ar *ar;
                 struct v4l2_device *v4l2_dev;
                 int ret;
                 
             
             
               ar = &ardev;
                 v4l2_dev = &ar->v4l2_dev;
               //init v4l2 name , version
                 strlcpy(v4l2_dev->name, "arv", sizeof(v4l2_dev->name));
                 v4l2_info(v4l2_dev, "Colour AR VGA driver %s\n", "0.0.1"); // output V4l2 info
                 ret = v4l2_device_register(NULL, v4l2_dev);
                 if (ret < 0) {
                     printk(KERN_INFO "Could not register v4l2_device\n");
                     return ret;
                 }
                 
                 //setup video
                 strlcpy(ar->vdev.name, "Mark vivi Driver", sizeof(ar->vdev.name));
                 ar->vdev.v4l2_dev = v4l2_dev;   // set V4l2_device address to video_device
                 ar->vdev.fops = &ar_fops;   //v4l2_file_operations
                 ar->vdev.ioctl_ops = &ar_ioctl_ops;   //v4l2_ioctl_ops
                 ar->vdev.release = video_device_release_empty;
                 set_bit(V4L2_FL_USE_FH_PRIO, &ar->vdev.flags);
                 video_set_drvdata(&ar->vdev, ar);
             
                 if (video_register_device(&ar->vdev, VFL_TYPE_GRABBER, -1) != 0) {
                     /* return -1, -ENFILE(full) or others */
                     printk(KERN_INFO "[mark]%s, %d, video_register_device FAIL \n", __func__,__LINE__);
                     ret = -ENODEV;
                     goto out_dev;
                 }    
               printk(KERN_INFO "[mark]%s, %d, module inserted\n", __func__,__LINE__);
               return 0;
             
             out_dev:
                 v4l2_device_unregister(&ar->v4l2_dev);
                 video_unregister_device(&ar->vdev);
                 
                 return ret;
                 
               
             }
             
             static void __exit vivi_exit(void)
             {
                 struct ar *ar;
                 ar = &ardev;
                 
                 printk(KERN_INFO "[mark]%s, %d, module remove\n", __func__,__LINE__);
                 video_unregister_device(&ar->vdev);
                 v4l2_device_unregister(&ar->v4l2_dev);
                 
             }
             
             module_init(vivi_init);
             module_exit(vivi_exit);
             
             MODULE_DESCRIPTION("Mark test module");
             MODULE_AUTHOR("Mark Yang");
             MODULE_LICENSE("GPL");
             

  -----------------
 
 

文章標籤

CuteParrot 發表在 痞客邦 PIXNET 留言(0) 人氣()

V4L2 driver Step by Step

.甚麼是V4L2 ?
  V4L2 全名為 Video For Linux Version 2,是 Linux 對於視訊擷取相關設備所建立的框架(Framework),此框架為驅動程式及應用程式提供了一套統一的接口規範。

  其支援的設備很多,不單只有視訊擷取設備,更可能包括: camera,video decoder, video encoder,tunner, ir remote, etc.
  列舉如下:
  .Video capture device- camera sensor, 裝置名稱為 /dev/video0~63 ,其 major number 為 81,minor number為0~63.
  .Video output device- 視訊數據編碼,裝置名稱為 /dev/video0~63.
  .Video overlay device- 一種圖形介面卡能將 TV訊號轉為VGA訊號,或是一種圖形介面卡能將擷取的影像直接存到視訊記憶體中。
  .Video output overlay device-OS-Screen Display(OSD)。
  .VBI device-提供對 Vertical Blanking Interval的控制. 裝置名稱為 /dev/vbi0~31.其 major number 為 81,minor number為224~255.
  .Radio device- FM/AM廣播設備,設備名稱為 /dev/radio0~63,其 major number 為 81,minor number為64~127.
 
.從檔案系統來看
  通常一個有成功註冊的 V4L2 Driver會在檔案系統中/dev註冊一個字元型設備如: video0, video1 (實際要根據你的平台總共註冊了多少個)。
  下面的範例為一個camera V4L2 dirver,所註冊的設備名稱為/dev/video0,類行為字元型設備,其 major number 為 81,minor number為0。
  --
  mark@R3600:/dev$ ll -l video0
  crw-rw----+ 1 root video 81, 0 Oct 21 10:21 video0
  --
  應用程式可以經由open此設備名稱 /dev/video0,進行 ioctl 對設備進行操作,如下達VIDIOC_QUERYCAP 來訊問設備的capability。
 
.撰寫一個簡單的 V4L2 driver
  為了要了解整個V4L2 driver的架構及撰寫方式,以下將採用循循漸進的方式,一步一步將一個完整的V4L2建構起來。
  並撰寫一個簡單的應用程式來對V4L2 driver做存取,進而更了解整個運作流程。
  因linux kernel近年來改版快速,在這邊先說明一下我的測試環境:
  ---
  OS:Ubuntu 1204
  Kernel version: 3.2.0-90-generic
  ---
 
.步驟一:暖身,建立一個driver(module)架構:
   linux下的驅動程式有一個基本的架構,我們先把他建立起來,並撰寫一個Makefile來編譯module,並嘗試把此driver load到kernel裡。
   一個簡單的driver 架構如下,此檔案請先命名為 (v4l2step1.c):
   --v4l2step1.c---   
      #include <linux/module.h>
        
      static int __init vivi_init(void)
      {      
            
        printk(KERN_INFO "[mark]%s, %d, module inserted\n", __func__,__LINE__);
        return 0;  
      }  
        
      static void __exit vivi_exit(void)
      {  
          printk(KERN_INFO "[mark]%s, %d, module remove\n", __func__,__LINE__);
      }  
        
      module_init(vivi_init);
      module_exit(vivi_exit);
        
      MODULE_DESCRIPTION("Mark test module");
      MODULE_AUTHOR("Mark Yang");
      MODULE_LICENSE("GPL");  
  -----------------
  簡單說明如下:
  當一個 module ko檔案被insmod時,會呼叫module_init,進入到 vivi_init 函式,目前是印出訊息
  當一個module ko檔案被 rmmod 時,會呼叫module_exit,進入到 vivi_exit 函式,目前是印出訊息
 
  為了要make dirver為.ko檔案,必須有一個 Makefile 檔案,內容如下:
  --Makefile--
    #
    # Makefile for kernel test
    #
    PWD         := $(shell pwd)
    KVERSION    := $(shell uname -r)
    KERNEL_DIR   = /usr/src/linux-headers-$(KVERSION)/
    
    MODULE_NAME  = v4l2step1
    obj-m       := $(MODULE_NAME).o   
    
    all:
        make -C $(KERNEL_DIR) M=$(PWD) modules
    clean:
        make -C $(KERNEL_DIR) M=$(PWD) clean
      
  ------------
  簡單說明如下:
  只要根據不同的driver .c檔名,修改MODULE_NAME  = v4l2step1 即可
 
  好,現在driver有了,Makefile也有了,將兩個檔案放在同目錄下,執行 make 指令應該可以build出 v4l2step1.ko
  如果有出現Permission denied訊息,請注意一下你的檔案權限,請將目錄或檔案權限改為 777。
 
  接下來就是要將 driver load起來,可以先用 lsmod看看目前有哪些 driver 有被load起來。
  可以發現,並沒有 v4l2step1 這支driver。
  現在我們要將 v4l2step1.ko load起來,利用 sudo insmod v4l2step1.ko 指令將 drvier load起來後
  再次用lsmod檢查看看,應該要有v4l2step1,如下:
  --lsmod----
    mark@R3600:~/v4l2/step1$ lsmod
    Module                  Size  Used by
    v4l2step1              12502  0
    vivi                   13069  0
    videodev               98259  1 vivi
    v4l2_compat_ioctl32    17128  1 videodev
    snd_hda_codec_hdmi     32530  1   
  ------
  也可以利用 dmesg 看看是否有 vivi_init 所吐出的訊息。
  ---dmesg---
  ...
  [78449.338187] [mark]vivi_init, 14, module inserted
  ------
 
  想要移除 v4l2step1 ,可以輸入指令  sudo rmmod v4l2step1,同樣的你可以用 lsmod 看看是否真的移除,且利用 dmesg 看看是否有訊息。
 
文章標籤

CuteParrot 發表在 痞客邦 PIXNET 留言(0) 人氣()

今天心血來潮,想把家中兩台螢幕接到AMD電腦上,此電腦是安裝 EAH4850顯卡

接上後卻發現,經由DVI轉HDMI後接到HDMI的螢幕時,卻無法滿屏

上網爬文之後,這問題可以經由更新驅動程式及顯示卡公用程式來解決

二話不說,上AMD官網下載及更新EAH4850驅動程式後,在 AMD VISION Engine Control Center 中找到以下選項

[我的數位平面面板]->[縮放選項]中,將縮放選項向右調整到 0% [全畫面掃描]後,就可以滿屏了。


在此紀錄給有需要的人。


文章標籤

CuteParrot 發表在 痞客邦 PIXNET 留言(0) 人氣()


當 ultraedit 搜尋時發生錯誤,可將以下檔案刪除,以解決此問題



c:\Users\mark\AppData\Roaming\IDMComp\UltraEdit\


CuteParrot 發表在 痞客邦 PIXNET 留言(0) 人氣()


error = gpio_request(pdata->gpio_reset,"maxtouch_gpio_reset");

gpio_request 第三個參數 "maxtouch_gpio_reset"
會秀在/sys/kernel/debug/gpio ,使用下列命令就可看到以下結果

# cat /sys/kernel/debug/gpio
root@msm8992:/sys/class/gpio/gpio974 # cat /sys/kernel/debug/gpio
cat /sys/kernel/debug/gpio
GPIOs 545-576, platform/qcom,smp2pgpio-ssr-smp2p-1-out.16, master-kernel:

GPIOs 577-608, platform/qcom,smp2pgpio-ssr-smp2p-1-in.15, slave-kernel:

GPIOs 609-640, platform/qcom,smp2pgpio-ssr-smp2p-2-out.14, master-kernel:

GPIOs 641-672, platform/qcom,smp2pgpio-ssr-smp2p-2-in.13, slave-kernel:

GPIOs 673-704, platform/qcom,smp2pgpio-smp2p-2-out.11, smp2p:

GPIOs 705-736, platform/qcom,smp2pgpio-smp2p-2-in.9, smp2p:

GPIOs 737-768, platform/qcom,smp2pgpio-smp2p-1-out.7, smp2p:

GPIOs 769-800, platform/qcom,smp2pgpio-smp2p-1-in.5, smp2p:

GPIOs 801-832, platform/qcom,smp2pgpio-smp2p-7-out.3, smp2p:

GPIOs 833-864, platform/qcom,smp2pgpio-smp2p-7-in.1, smp2p:

GPIOs 865-865, spmi/qpnp-pin-ffffffc06344e880, pmi8994-mpp:

GPIOs 866-866, spmi/qpnp-pin-ffffffc063449080, pmi8994-gpio:
gpio-866 (usb_otg_vreg ) out lo

GPIOs 867-877, spmi/qpnp-pin-ffffffc06340d280, pm8994-gpio:
gpio-868 (volume_up ) in hi
gpio-871 (pwrreq_gpio ) in lo
gpio-873 (bt_vreg ) out lo
gpio-874 (nfc_clkreq_gpio ) in lo
gpio-875 (TOMTOM_CODEC_PMIC_MC) in lo

GPIOs 878-1023, platform/fd510000.pinctrl, msm_tlmm_gpio:
gpio-907 (nfc_irq_gpio ) in lo
gpio-908 (nfc_reset_gpio ) out lo
gpio-913 (perst-gpio ) out lo
gpio-915 (wake-gpio ) in hi
gpio-935 (maxtouch_gpio_irq ) in hi
gpio-937 (maxtouch_gpio_reset ) out hi
gpio-939 (display-3v3 ) in hi
gpio-946 (CDC_RESET ) out hi
gpio-967 (display-1v8 ) in hi
gpio-974 (sysfs ) out hi
gpio-983 (sysfs ) out hi
gpio-991 (wlan-en-gpio ) out lo

CuteParrot 發表在 痞客邦 PIXNET 留言(0) 人氣()

 

platfrom: MSM8909

Android version: lolillop 5.1.1, user-debug build


GT970 driver在init時會建立 debug fs
我們可以利用adb shell去讀取 GT970 register的值
以下為方法:

.adb root
.adb remount
.adb shell
#cd d/ts_debug
#echo 0x8053 > addr // 讀取 0x8053的設定值
#cat data
20 // 讀取出來為0x20

目前此debug fs不支援 write的操作

文章標籤

CuteParrot 發表在 痞客邦 PIXNET 留言(0) 人氣()