static bool alsa_to_h2w_filter(struct input_handle *handle, unsigned int type,
						unsigned int code, int value)
{
	if ((code == SW_HEADPHONE_INSERT) || (code == SW_MICROPHONE_INSERT))
		alsa_to_h2w_headset_report(switch_to_h2w(handle->dev->sw[0]));
	return false;
}
static int alsa_to_h2w_connect(struct input_handler *handler,
		struct input_dev *dev, const struct input_device_id *id)
{
	int ret;
	struct input_handle *handle;

	handle = kzalloc(sizeof(*handle), GFP_KERNEL);
	if (!handle)
		return -ENOMEM;
	handle->dev = dev;
	handle->handler = handler;
	handle->name = "alsa_to_h2w";

	ret = input_register_handle(handle);
	if (ret)
		goto err_input_register_handle;

	ret = input_open_device(handle);
	if (ret)
		goto err_input_open_device;

	alsa_to_h2w_headset_report(switch_to_h2w(dev->sw[0]));

	return 0;

err_input_open_device:
	input_unregister_handle(handle);
err_input_register_handle:
	kfree(handle);
	return ret;
}
static int alsa_to_h2w_connect(struct input_handler *handler,
		struct input_dev *dev, const struct input_device_id *id)
{
	int ret;
	struct input_handle *handle;

	/*
	 * If a sensor hub is present, any other jack input device is a dummy
	 * that should be ignored.
	 */
	if (sensor_hub_present) return -ENODEV;

	handle = kzalloc(sizeof(*handle), GFP_KERNEL);
	if (!handle)
		return -ENOMEM;
	handle->dev = dev;
	handle->handler = handler;
	handle->name = "alsa_to_h2w";

	ret = input_register_handle(handle);
	if (ret)
		goto err_input_register_handle;

	ret = input_open_device(handle);
	if (ret)
		goto err_input_open_device;

	if (dev->name && (strcmp(dev->name, "sensorprocessor") == 0))
		sensor_hub_present = true;

	alsa_to_h2w_headset_report(switch_to_h2w(dev->sw[0]));

	return 0;

err_input_open_device:
	input_unregister_handle(handle);
err_input_register_handle:
	kfree(handle);
	return ret;
}