INT32 hif_sdio_create_dev_node(void) { INT32 iResult = -1; HIF_SDIO_DBG_FUNC("++"); iResult = register_chrdev(hifSdioMajor, kObjName, &hifDevOps); if (0 > iResult) { HIF_SDIO_ERR_FUNC("register_chrdev failed.\n"); iResult = -1; } else { hifSdioMajor = hifSdioMajor == 0 ? iResult : hifSdioMajor; HIF_SDIO_INFO_FUNC("register_chrdev succeed, mtk_jajor = %d\n", hifSdioMajor); pHifClass = class_create(THIS_MODULE, HifClassName); if (IS_ERR(pHifClass)) { HIF_SDIO_ERR_FUNC("class_create error\n"); iResult = -2; } else { pHifDev = device_create(pHifClass, NULL, MKDEV(hifSdioMajor, 0), NULL, HifClassName, "%d", 0); if (IS_ERR(pHifDev)) { HIF_SDIO_ERR_FUNC("device_create error:%ld\n", PTR_ERR(pHifDev)); iResult = -3; } else { HIF_SDIO_INFO_FUNC("device_create succeed\n"); iResult = 0; } } } return iResult; }
static long hif_sdio_unlocked_ioctl(struct file *filp, unsigned int cmd, unsigned long arg) { int retval = 0; HIF_SDIO_DBG_FUNC("cmd (%d)\n", cmd); switch (cmd) { case COMBO_IOCTL_GET_CHIP_ID: gComboChipId = 0x6628; retval = gComboChipId; HIF_SDIO_INFO_FUNC("get combo chip id: 0x%x\n", gComboChipId); break; case COMBO_IOCTL_SET_CHIP_ID: gComboChipId = arg; HIF_SDIO_INFO_FUNC("set combo chip id to 0x%x\n", gComboChipId); break; default: HIF_SDIO_WARN_FUNC("unknown cmd (%d)\n", cmd); retval = 0; break; } return retval; }