static int fsa9480_codec_probe(struct i2c_client *client, const struct i2c_device_id *id) { struct fsa9480_state *state; struct device *dev = &client->dev; u8 pData; DEBUG_FSA9480("[FSA9480] %s\n", __func__); s3c_gpio_cfgpin(GPIO_USB_SW_SCL, S3C_GPIO_OUTPUT); s3c_gpio_setpull(GPIO_USB_SW_SCL, S3C_GPIO_PULL_NONE); s3c_gpio_cfgpin(GPIO_USB_SW_SDA, S3C_GPIO_OUTPUT); s3c_gpio_setpull(GPIO_USB_SW_SDA, S3C_GPIO_PULL_NONE); s3c_gpio_cfgpin(GPIO_UART_SEL, S3C_GPIO_OUTPUT ); s3c_gpio_setpull(GPIO_UART_SEL, S3C_GPIO_PULL_NONE); user_switch_init(); init_waitqueue_head(&usb_detect_waitq); INIT_WORK(&fsa9480_work, FSA9480_ReadIntRegister); fsa9480_workqueue = create_singlethread_workqueue("fsa9480_workqueue"); state = kzalloc(sizeof(struct fsa9480_state), GFP_KERNEL); if(!state) { dev_err(dev, "%s: failed to create fsa9480_state\n", __func__); return -ENOMEM; } state->client = client; fsa9480_i2c_client = client; i2c_set_clientdata(client, state); if(!fsa9480_i2c_client) { dev_err(dev, "%s: failed to create fsa9480_i2c_client\n", __func__); return -ENODEV; } /*clear interrupt mask register*/ fsa9480_read( REGISTER_CONTROL, &pData); fsa9480_write( REGISTER_CONTROL, pData & ~INT_MASK); fsa9480_interrupt_init(); fsa9480_chip_init(); return 0; }
static int fsa9480_codec_probe(struct i2c_client *client, const struct i2c_device_id *id) { struct fsa9480_state *state; struct device *dev = &client->dev; u8 pData; DEBUG_FSA9480("[FSA9480] %s\n", __func__); s3c_gpio_cfgpin(GPIO_USB_SCL_28V, S3C_GPIO_OUTPUT); s3c_gpio_setpull(GPIO_USB_SCL_28V, S3C_GPIO_PULL_NONE); s3c_gpio_cfgpin(GPIO_USB_SDA_28V, S3C_GPIO_OUTPUT); s3c_gpio_setpull(GPIO_USB_SDA_28V, S3C_GPIO_PULL_NONE); s3c_gpio_cfgpin(GPIO_UART_SEL, S3C_GPIO_OUTPUT ); s3c_gpio_setpull(GPIO_UART_SEL, S3C_GPIO_PULL_NONE); if (device_create_file(switch_dev, &dev_attr_uart_sel) < 0) pr_err("Failed to create device file(%s)!\n", dev_attr_uart_sel.attr.name); if (device_create_file(switch_dev, &dev_attr_usb_sel) < 0) DEBUG_FSA9480("[FSA9480]Failed to create device file(%s)!\n", dev_attr_usb_sel.attr.name); if (device_create_file(switch_dev, &dev_attr_usb_state) < 0) DEBUG_FSA9480("[FSA9480]Failed to create device file(%s)!\n", dev_attr_usb_state.attr.name); #if 1 if (device_create_file(switch_dev, &dev_attr_DMport) < 0) pr_err("Failed to create device file(%s)!\n", dev_attr_DMport.attr.name); if (device_create_file(switch_dev, &dev_attr_DMlog) < 0) pr_err("Failed to create device file(%s)!\n", dev_attr_DMlog.attr.name); #endif if (device_create_file(switch_dev, &dev_attr_UsbMenuSel) < 0) pr_err("Failed to create device file(%s)!\n", dev_attr_UsbMenuSel.attr.name); if (device_create_file(switch_dev, &dev_attr_AskOnMenuSel) < 0) pr_err("Failed to create device file(%s)!\n", dev_attr_AskOnMenuSel.attr.name); if (device_create_file(switch_dev, &dev_attr_Mtp) < 0) pr_err("Failed to create device file(%s)!\n", dev_attr_Mtp.attr.name); if (device_create_file(switch_dev, &dev_attr_SwitchingInitValue) < 0) pr_err("Failed to create device file(%s)!\n", dev_attr_SwitchingInitValue.attr.name); if (device_create_file(switch_dev, &dev_attr_FactoryResetValue) < 0) pr_err("Failed to create device file(%s)!\n", dev_attr_FactoryResetValue.attr.name); if (device_create_file(switch_dev, &dev_attr_AskOnStatus) < 0) pr_err("Failed to create device file(%s)!\n", dev_attr_AskOnStatus.attr.name); if (device_create_file(switch_dev, &dev_attr_MtpInitStatusSel) < 0) pr_err("Failed to create device file(%s)!\n", dev_attr_MtpInitStatusSel.attr.name); if (device_create_file(switch_dev, &dev_attr_AskInitStatusSel) < 0) pr_err("Failed to create device file(%s)!\n", dev_attr_AskInitStatusSel.attr.name); if (device_create_file(switch_dev, &dev_attr_tethering) < 0) pr_err("Failed to create device file(%s)!\n", dev_attr_tethering.attr.name); if (device_create_file(switch_dev, &dev_attr_dock) < 0) pr_err("Failed to create device file(%s)!\n", dev_attr_dock.attr.name); init_waitqueue_head(&usb_detect_waitq); INIT_WORK(&fsa9480_work, FSA9480_ReadIntRegister); fsa9480_workqueue = create_singlethread_workqueue("fsa9480_workqueue"); state = kzalloc(sizeof(struct fsa9480_state), GFP_KERNEL); if(!state) { dev_err(dev, "%s: failed to create fsa9480_state\n", __func__); return -ENOMEM; } indicator_dev.name = DRIVER_NAME; indicator_dev.print_name = print_switch_name; indicator_dev.print_state = print_switch_state; switch_dev_register(&indicator_dev); state->client = client; fsa9480_i2c_client = client; i2c_set_clientdata(client, state); if(!fsa9480_i2c_client) { dev_err(dev, "%s: failed to create fsa9480_i2c_client\n", __func__); return -ENODEV; } /*clear interrupt mask register*/ fsa9480_read(fsa9480_i2c_client, REGISTER_CONTROL, &pData); fsa9480_write(fsa9480_i2c_client, REGISTER_CONTROL, pData & ~INT_MASK); fsa9480_interrupt_init(); fsa9480_chip_init(); INIT_DELAYED_WORK(&micorusb_init_work, connectivity_switching_init); schedule_delayed_work(&micorusb_init_work, msecs_to_jiffies(200)); return 0; }