static int __init smartq_usb_host_init(void) { int ret; ret = gpio_request(S3C64XX_GPL(0), "USB power control"); if (ret < 0) { pr_err("%s: failed to get GPL0\n", __func__); return ret; } ret = gpio_request(S3C64XX_GPL(1), "USB host power control"); if (ret < 0) { pr_err("%s: failed to get GPL1\n", __func__); goto err; } if (!machine_is_smartq5()) { /* This isn't present on a SmartQ 5 board */ ret = gpio_request(S3C64XX_GPL(10), "USB host overcurrent"); if (ret < 0) { pr_err("%s: failed to get GPL10\n", __func__); goto err2; } } /* turn power off */ gpio_direction_output(S3C64XX_GPL(0), 0); gpio_direction_output(S3C64XX_GPL(1), 0); if (!machine_is_smartq5()) gpio_direction_input(S3C64XX_GPL(10)); s3c_device_ohci.dev.platform_data = &smartq_usb_host_info; return 0; err2: gpio_free(S3C64XX_GPL(1)); err: gpio_free(S3C64XX_GPL(0)); return ret; }
static int __init smartq_init(void) { int ret; if (!machine_is_smartq7() && !machine_is_smartq5()) { pr_info("Only SmartQ is supported by this ASoC driver\n"); return -ENODEV; } smartq_snd_device = platform_device_alloc("soc-audio", -1); if (!smartq_snd_device) return -ENOMEM; platform_set_drvdata(smartq_snd_device, &snd_soc_smartq); ret = platform_device_add(smartq_snd_device); if (ret) { platform_device_put(smartq_snd_device); return ret; } /* Initialise GPIOs used by amplifiers */ ret = gpio_request(S3C64XX_GPK(12), "amplifiers shutdown"); if (ret) { dev_err(&smartq_snd_device->dev, "Failed to register GPK12\n"); goto err_unregister_device; } /* Disable amplifiers */ ret = gpio_direction_output(S3C64XX_GPK(12), 1); if (ret) { dev_err(&smartq_snd_device->dev, "Failed to configure GPK12\n"); goto err_free_gpio_amp_shut; } return 0; err_free_gpio_amp_shut: gpio_free(S3C64XX_GPK(12)); err_unregister_device: platform_device_unregister(smartq_snd_device); return ret; }
static void smartq_usb_host_enableoc(struct s3c2410_hcd_info *info, int on) { int ret; /* This isn't present on a SmartQ 5 board */ if (machine_is_smartq5()) return; if (on) { ret = request_irq(gpio_to_irq(S3C64XX_GPL(10)), smartq_usb_host_ocirq, IRQF_DISABLED | IRQF_TRIGGER_RISING | IRQF_TRIGGER_FALLING, "USB host overcurrent", info); if (ret != 0) pr_err("failed to request usb oc irq: %d\n", ret); } else { free_irq(gpio_to_irq(S3C64XX_GPL(10)), info); } }