// SPDX-License-Identifier: GPL-2.0 /* * nokia.c -- Nokia Composite Gadget Driver * * Copyright (C) 2008-2010 Nokia Corporation * Contact: Felipe Balbi <felipe.balbi@nokia.com> * * This gadget driver borrows from serial.c which is: * * Copyright (C) 2003 Al Borchers (alborchers@steinerpoint.com) * Copyright (C) 2008 by David Brownell * Copyright (C) 2008 by Nokia Corporation
*/
status = usb_string_ids_tab(cdev, strings_dev); if (status < 0) goto err_usb;
device_desc.iManufacturer = strings_dev[USB_GADGET_MANUFACTURER_IDX].id;
device_desc.iProduct = strings_dev[USB_GADGET_PRODUCT_IDX].id;
status = strings_dev[STRING_DESCRIPTION_IDX].id;
nokia_config_500ma_driver.iConfiguration = status;
nokia_config_100ma_driver.iConfiguration = status;
if (!gadget_is_altset_supported(gadget)) {
status = -ENODEV; goto err_usb;
}
fi_phonet = usb_get_function_instance("phonet"); if (IS_ERR(fi_phonet))
pr_debug("could not find phonet function\n");
fi_obex1 = usb_get_function_instance("obex"); if (IS_ERR(fi_obex1))
pr_debug("could not find obex function 1\n");
fi_obex2 = usb_get_function_instance("obex"); if (IS_ERR(fi_obex2))
pr_debug("could not find obex function 2\n");
fi_acm = usb_get_function_instance("acm"); if (IS_ERR(fi_acm)) {
status = PTR_ERR(fi_acm); goto err_obex2_inst;
}
fi_ecm = usb_get_function_instance("ecm"); if (IS_ERR(fi_ecm)) {
status = PTR_ERR(fi_ecm); goto err_acm_inst;
}
fi_msg = usb_get_function_instance("mass_storage"); if (IS_ERR(fi_msg)) {
status = PTR_ERR(fi_msg); goto err_ecm_inst;
}
/* set up mass storage function */
fsg_config_from_params(&fsg_config, &fsg_mod_data, fsg_num_buffers);
fsg_config.vendor_name = "Nokia";
fsg_config.product_name = "N900";
err_put_cfg1:
usb_put_function(f_acm_cfg1); if (!IS_ERR_OR_NULL(f_obex1_cfg1))
usb_put_function(f_obex1_cfg1); if (!IS_ERR_OR_NULL(f_obex2_cfg1))
usb_put_function(f_obex2_cfg1); if (!IS_ERR_OR_NULL(f_phonet_cfg1))
usb_put_function(f_phonet_cfg1);
usb_put_function(f_ecm_cfg1);
err_msg_luns:
fsg_common_remove_luns(fsg_opts->common);
err_msg_buf:
fsg_common_free_buffers(fsg_opts->common);
err_msg_inst:
usb_put_function_instance(fi_msg);
err_ecm_inst:
usb_put_function_instance(fi_ecm);
err_acm_inst:
usb_put_function_instance(fi_acm);
err_obex2_inst: if (!IS_ERR(fi_obex2))
usb_put_function_instance(fi_obex2); if (!IS_ERR(fi_obex1))
usb_put_function_instance(fi_obex1); if (!IS_ERR(fi_phonet))
usb_put_function_instance(fi_phonet);
err_usb: return status;
}
staticint nokia_unbind(struct usb_composite_dev *cdev)
{ if (!IS_ERR_OR_NULL(f_obex1_cfg2))
usb_put_function(f_obex1_cfg2); if (!IS_ERR_OR_NULL(f_obex2_cfg2))
usb_put_function(f_obex2_cfg2); if (!IS_ERR_OR_NULL(f_obex1_cfg1))
usb_put_function(f_obex1_cfg1); if (!IS_ERR_OR_NULL(f_obex2_cfg1))
usb_put_function(f_obex2_cfg1); if (!IS_ERR_OR_NULL(f_phonet_cfg1))
usb_put_function(f_phonet_cfg1); if (!IS_ERR_OR_NULL(f_phonet_cfg2))
usb_put_function(f_phonet_cfg2);
usb_put_function(f_acm_cfg1);
usb_put_function(f_acm_cfg2);
usb_put_function(f_ecm_cfg1);
usb_put_function(f_ecm_cfg2);
usb_put_function(f_msg_cfg1);
usb_put_function(f_msg_cfg2);
usb_put_function_instance(fi_msg);
usb_put_function_instance(fi_ecm); if (!IS_ERR(fi_obex2))
usb_put_function_instance(fi_obex2); if (!IS_ERR(fi_obex1))
usb_put_function_instance(fi_obex1); if (!IS_ERR(fi_phonet))
usb_put_function_instance(fi_phonet);
usb_put_function_instance(fi_acm);
Die Informationen auf dieser Webseite wurden
nach bestem Wissen sorgfältig zusammengestellt. Es wird jedoch weder Vollständigkeit, noch Richtigkeit,
noch Qualität der bereit gestellten Informationen zugesichert.
Bemerkung:
Die farbliche Syntaxdarstellung und die Messung sind noch experimentell.