qqq

来源:互联网 发布:mac截图保存在哪儿 编辑:程序博客网 时间:2024/04/29 04:42
 ==================================== 触摸屏驱动相关 ====================================魅族现在的规模还小,自然要先靠这些大厂提供成品了。等魅族有实力的时候,就应该要自己设计研发触摸屏才行了。说句实在话,M9 的触摸屏还是略逊 IP 的。 也就是 SYNAPTICS的 触摸屏技术还是输给了 iPhone  kernel/include/linux/i2c.h:429: static inline int i2c_add_driver(struct i2c_driver *driver)kernel/drivers/input/Makefile:22: obj-$(CONFIG_INPUT_TOUCHSCREEN) += touchscreen/kernel/drivers/input/touchscreen/Makefileobj-$(CONFIG_TOUCHSCREEN_SYNAPTICS_I2C_RMI) += synaptics_i2c_rmi.okernel/drivers/i2c/busses/i2c-msm.c:726: ret = request_irq(dev->irq, msm_i2c_interrupt,kernel/drivers/input/touchscreen/synaptics_i2c_rmi.c:539: return i2c_add_driver(&synaptics_ts_driver);  内核配置:Symbol: TOUCHSCREEN_SYNAPTICS_I2C_RMI [=y]Prompt: Synaptics i2c touchscreen Defined at drivers/input/touchscreen/Kconfig:298Depends on: !S390 [=S390] && INPUT [=y] && INPUT_TOUCHSCREEN [=y] && I2C [=y]Location: -> Device Drivers -> Input device support-> Generic input layer (needed for keyboard, mouse, ...) (INPUT [=y])-> Touchscreens (INPUT_TOUCHSCREEN [=y])    kernel/drivers/mmc/host/msm_sdcc.c:1495: ret = request_irq(irqres->start, msmsdcc_irq, IRQF_SHARED,kernel/drivers/mmc/host/msm_sdcc.c:1500: ret = request_irq(irqres->start, msmsdcc_pio_irq, IRQF_SHARED,kernel/drivers/mmc/host/msm_sdcc.c:1506: ret = request_irq(plat->sdiowakeup_irq,kernel/drivers/mmc/host/msm_sdcc.c:1534: ret = request_irq(plat->status_irq,kernel/drivers/staging/dream/smd/smd.c:1077: r = request_irq(INT_A9_M2A_5, smsm_irq_handler,kernel/drivers/staging/dream/camera/msm_vfe8x_proc.c:1969: rc = request_irq(ctrl->vfeirq, vfe_parse_irq,kernel/drivers/spi/spi_qsd.c:362:static inline int msm_spi_request_irq(struct msm_spi *dd,kernel/drivers/spi/spi_qsd.c:367: rc = request_irq(dd->irq_in, msm_spi_input_irq, IRQF_TRIGGER_RISING,kernel/drivers/spi/spi_qsd.c:371: rc = request_irq(dd->irq_out, msm_spi_output_irq, IRQF_TRIGGER_RISING,kernel/drivers/char/msm_rotator.c:1105: rc = request_irq(msm_rotator_dev->irq, msm_rotator_isr,kernel/drivers/i2c/busses/i2c-msm.c:726: ret = request_irq(dev->irq, msm_i2c_interrupt,kernel/drivers/video/msm/mdp.c:847: ret = request_irq(INT_MDP, mdp4_isr, IRQF_DISABLED, "MDP", 0);kernel/drivers/video/msm/mddi_client_nt35399.c:169: ret = request_irq(irq, nt35399_vsync_interrupt, IRQF_TRIGGER_RISING,kernel/drivers/video/msm/mddi_client_toshiba.c:200: ret = request_irq(irq, toshiba_vsync_interrupt, IRQF_TRIGGER_RISING,kernel/drivers/video/msm/lcdc_st15.c:305: rc = request_irq(dd->pd->irq,kernel/drivers/video/msm/mddihosti.c:1555: if (request_irqkernel/drivers/input/touchscreen/msm_touch.c:252: result = request_irq(ts->irq, ts_interrupt, IRQF_TRIGGER_RISING,kernel/drivers/input/touchscreen/msm_ts.c:390: err = request_irq(ts->sample_irq, msm_ts_irq,kernel/drivers/input/touchscreen/msm_ts.c:398: err = request_irq(ts->pen_up_irq, msm_ts_irq,kernel/drivers/input/mouse/msm_gpio_mouse.c:577:ret = request_irq(mouse_irq, mouse_irq_handler, IRQF_TRIGGER_FALLING , dd->input_dev->name, dd);kernel/drivers/serial/msm_serial.c:565: ret = request_irq(port->irq, msm_irq, IRQF_TRIGGER_HIGH,kernel/drivers/serial/msm_serial.c:607: ret = request_irq(msm_port->wakeup.irq, msm_rx_irq,kernel/drivers/usb/function/msm_hsusb.c:3293: ret = request_irq(irq, usb_interrupt, IRQF_SHARED, pdev->name, ui);kernel/drivers/usb/function/msm_otg.c:306: ret = request_irq(xceiv->irq, msm_otg_irq, IRQF_SHARED,kernel/drivers/usb/gadget/msm72k_udc.c:1378: ret = request_irq(otg->irq, usb_interrupt,kernel/drivers/usb/gadget/msm72k_udc.c:1539: ret = request_irq(otg->irq, usb_interrupt,kernel/drivers/usb/otg/msm72k_otg.c:939: ret = request_irq(dev->irq, msm_otg_irq, IRQF_SHARED,kernel/drivers/usb/otg/msm72k_otg.c:965: ret = request_irq(vbus_on_irq, pmic_vbus_on_irq,kernel/arch/arm/mach-msm/smd.c:1391: r = request_irq(INT_A9_M2A_0, smd_modem_irq_handler,kernel/arch/arm/mach-msm/smd.c:1400: r = request_irq(INT_A9_M2A_5, smsm_irq_handler,kernel/arch/arm/mach-msm/smd.c:1412: r = request_irq(INT_ADSP_A11, smd_dsp_irq_handler,kernel/arch/arm/mach-msm/smd.c:1421: r = request_irq(INT_ADSP_A11, smsm_irq_handler,kernel/arch/arm/mach-msm/board-mahimahi-microp.c:2086: ret = request_irq(client->irq,kernel/arch/arm/mach-msm/htc_headset.c:1133: ret = request_irq(hi->irq, detect_irq_handler,kernel/arch/arm/mach-msm/htc_headset.c:1140: ret = request_irq(hi->irq_btn, button_irq_handler,kernel/arch/arm/mach-msm/qdsp5/adsp.c:1127: rc = request_irq(INT_ADSP, adsp_irq_handler, IRQF_TRIGGER_RISING,kernel/arch/arm/mach-msm/smmu_driver.c:239: ret = request_irq(irq, smmu_secure_irpt_handler,kernel/arch/arm/mach-msm/hw3d.c:395: ret = request_irq(INT_GRAPHICS, hw3d_irq_handler,kernel/arch/arm/mach-msm/qdsp5v2/adsp.c:965: rc = request_irq(INT_ADSP, adsp_irq_handler,   ===================================== 摄像头驱动相关 ====================================高通库: /system/lib/liboemcamera.so此库调用内核驱动,与内核交换的文件: vendor/qcom/proprietary/mm-camera/common/camera.h:8: #define MSM_CAMERA_CONTROL "/dev/msm_camera/control0"vendor/qcom/proprietary/mm-camera/apps/appslib/camaf_ctrl.c:32: fd = open(MSM_CAMERA_CONTROL, O_RDWR);vendor/qcom/proprietary/mm-camera/apps/appslib/Android.mk LOCAL_MODULE:= liboemcamera 高通库:/system/lib/libcamera.so./vendor/qcom/android-open/libcamera2/QualcommCameraHardware.cpp 使用库 liboemcamera.so libmmcamera = ::dlopen("liboemcamera.so", RTLD_NOW);./vendor/qcom/android-open/libcamera2/Android.mkLOCAL_SHARED_LIBRARIES+= liboemcameraLOCAL_MODULE:= libcamera android库 /system/lib/libcameraservice.so./frameworks/base/camera/libcameraservice/Android.mkLOCAL_SHARED_LIBRARIES += libcameraLOCAL_MODULE:= libcameraservice android库 /system/lib/libsystem_server.so./frameworks/base/cmds/system_server/library/Android.mkLOCAL_SHARED_LIBRARIES := \libandroid_runtime \libsurfaceflinger \libaudioflinger \libcameraservice \libmediaplayerservice \libutils \libbinder \libcutilsLOCAL_MODULE:= libsystem_server 开机启动camera服务:CameraService::instantiate();./frameworks/base/cmds/system_server/library/system_init.cppextern "C" status_t system_init(){LOGI("Entered system_init()");。。。。。。// Start the camera serviceCameraService::instantiate();。。。。。。} out/target/product/msm7627_ffa/system/bin/system_serverframeworks/base/cmds/system_server/system_main.cpp:60: frameworks/base/services/jni/com_android_server_SystemServer.cppstatic void android_server_SystemServer_init1(JNIEnv* env, jobject clazz){system_init();}  kernel/drivers/media/video/msm/ov5650.c:1215: rc = i2c_add_driver(&ov5650_i2c_driver);Symbol: OV5650 [=n]Prompt: Sensor ov5650 (Bayer5M)Defined at drivers/media/video/msm/Kconfig:16Depends on: MEDIA_SUPPORT [=y] && VIDEO_CAPTURE_DRIVERS [=y] && VIDEO_V4L2 [=y] && MSM_CAMERA [=n] && !ARCH_MSM8X60 [=ARCH_MSM8X60]Location: -> Device Drivers -> Multimedia support (MEDIA_SUPPORT [=y]) -> Video capture adapters (VIDEO_CAPTURE_DRIVERS [=y])  CONFIG_MSM_CAMERA=yCONFIG_MSM_CAMERA_AF_FOXCONN=yCONFIG_MSM_CAMERA_FLASH=yCONFIG_MT9T013=yCONFIG_MT9D112=yCONFIG_OV5650=yCONFIG_MT9P012=y kernel/drivers/media/video/msm/ov5650.ckernel/drivers/media/video/msm/mt9d112.ckernel/drivers/media/video/msm/mt9t013.c   // take a picture - image is returned in callbackstatus_t CameraService::Client::takePicture()return mHardware->takePicture();vendor/qcom/android-open/libcamera2/QualcommCameraHardware.cppstatus_t QualcommCameraHardware::takePicture()mSnapshotThreadRunning = !pthread_create(&mSnapshotThread,&attr,snapshot_thread,NULL);vendor/qcom/android-open/libcamera2/QualcommCameraHardware.cppvoid *snapshot_thread(void *user)obj->runSnapshotThread(user);void *libhandle = ::dlopen("liboemcamera.so", RTLD_NOW);if(mSnapshotFormat == PICTURE_FORMAT_JPEG){if (native_start_snapshot(mCameraControlFd))receiveRawPicture();elseLOGE("main: native_start_snapshot failed!");} else if(mSnapshotFormat == PICTURE_FORMAT_RAW){if(native_start_raw_snapshot(mCameraControlFd)){receiveRawSnapshot();} else {LOGE("main: native_start_raw_snapshot failed!");}} vendor/qcom/android-open/libcamera2/QualcommCameraHardware.cppvoid *opencamerafd(void *data) {camerafd = open(MSM_CAMERA_CONTROL, O_RDWR);return NULL;}vendor/qcom/proprietary/mm-camera/common/camera.h:8: #define MSM_CAMERA_CONTROL "/dev/msm_camera/control0"bool QualcommCameraHardware::startCamera()mCameraControlFd = camerafd; vendor/qcom/android-open/libcamera2/QualcommCameraHardware.cppstatic bool native_start_snapshot(int camfd){。。。。。。ctrlCmd.timeout_ms = 5000;ctrlCmd.type = CAMERA_START_SNAPSHOT;ctrlCmd.length = 0;ctrlCmd.resp_fd = camfd; // FIXME: this will be put in by the kernelif(ioctl(camfd, MSM_CAM_IOCTL_CTRL_COMMAND, &ctrlCmd) < 0)。。。。。。}vendor/qcom/proprietary/mm-camera/common/camera.h此处的 ioctl 执行的是驱动:kernel/drivers/media/video/msm/msm_camera.cstatic const struct file_operations msm_fops_control = {.owner = THIS_MODULE,.open = msm_open_control,.unlocked_ioctl = msm_ioctl_control,.release = msm_release_control,};中的函数:static long msm_ioctl_control(struct file *filep, unsigned int cmd,unsigned long arg)38》43》1》15》2》37》9》11》6》61》65》27》6》21》12》8》14》50》26》55》38》1》40》1》39 typedef enum {CAMERA_SET_PARM_DISPLAY_INFO, /* 0 */CAMERA_SET_PARM_DIMENSION, /* 1 */CAMERA_SET_PARM_ZOOM, /* 2 */CAMERA_SET_PARM_CONTRAST, /* 6 */CAMERA_SET_PARM_EXPOSURE_COMPENSATION, /* 8 */CAMERA_SET_PARM_SHARPNESS, /* 9 */CAMERA_SET_PARM_HUE, /* 10 */CAMERA_SET_PARM_SATURATION, /* 11 */CAMERA_SET_PARM_EXPOSURE, /* 12 */CAMERA_SET_PARM_AUTO_FOCUS,CAMERA_SET_PARM_WB, /* 14 */CAMERA_SET_PARM_EFFECT, /* 15 */CAMERA_SET_PARM_PREVIEW_MODE, /* 20 */CAMERA_SET_PARM_ISO, /* 26 */CAMERA_SET_PARM_BESTSHOT_MODE, /* 27 */CAMERA_SET_PARM_AF_MODE, /* 30 */CAMERA_SET_PARM_ROLLOFF, /* 37 */CAMERA_STOP_PREVIEW, /* 38 */CAMERA_START_PREVIEW, /* 39 */CAMERA_START_SNAPSHOT, /* 40 */CAMERA_EXIT, /* 43 */CAMERA_SET_PARM_LED_MODE, /* 50 */CAMERA_PREPARE_SNAPSHOT, /* 55 */CAMERA_SET_FPS_MODE,CAMERA_START_VIDEO,CAMERA_STOP_RECORDING, /* 60 */CAMERA_SET_PARM_AEC_ROI, /* 61 */CAMERA_SET_CAF,CAMERA_SET_PARM_BL_DETECTION_ENABLE,CAMERA_SET_PARM_SNOW_DETECTION_ENABLE,CAMERA_SET_PARM_AF_ROI, /* 65 */CAMERA_CTRL_PARM_MAX} cam_ctrl_type;#define OV5650_PIDH_REG 0x300A#define OV5650_PIDL_REG 0x300B读取摄像头型号:/* 3. Read sensor Model ID: */if (ov5650_i2c_read(OV5650_PIDH_REG, &chipidh,1) < 0)goto init_probe_fail;if (ov5650_i2c_read(OV5650_PIDL_REG, &chipidl,1) < 0)goto init_probe_fail;printk("kov5650 model_id = 0x%x 0x%x\n", chipidh, chipidl);   static const struct file_operations msm_fops_config = {.owner = THIS_MODULE,.open = msm_open,.unlocked_ioctl = msm_ioctl_config,.release = msm_release_config,};static const struct file_operations msm_fops_control = {.owner = THIS_MODULE,.open = msm_open_control,.unlocked_ioctl = msm_ioctl_control,.release = msm_release_control,}; static long msm_ioctl_control(struct file *filep, unsigned int cmd,unsigned long arg)void __user *argp = (void __user *)arg;struct msm_control_device *ctrl_pmsm = filep->private_data;struct msm_device *pmsm = ctrl_pmsm->pmsm;如果 cmd 等于 MSM_CAM_IOCTL_GET_SENSOR_INFO:那么: rc = msm_get_sensor_info(pmsm->sync, argp); static long msm_ioctl_config(struct file *filep, unsigned int cmd,unsigned long arg)void __user *argp = (void __user *)arg;struct msm_device *pmsm = filep->private_data;switch (cmd) {case MSM_CAM_IOCTL_GET_SENSOR_INFO:rc = msm_get_sensor_info(pmsm->sync, argp);break;