From: Wesley Cheng <wcheng@codeaurora.org>
To: Jun Li <lijun.kernel@gmail.com>
Cc: Heikki Krogerus <heikki.krogerus@linux.intel.com>,
Greg Kroah-Hartman <gregkh@linuxfoundation.org>,
Mark Rutland <mark.rutland@arm.com>,
Rob Herring <robh+dt@kernel.org>,
agross@kernel.org, bjorn.andersson@linaro.org,
lkml <linux-kernel@vger.kernel.org>,
linux-arm-msm@vger.kernel.org,
"open list:OPEN FIRMWARE AND FLATTENED DEVICE TREE BINDINGS"
<devicetree@vger.kernel.org>,
Linux USB List <linux-usb@vger.kernel.org>,
Jack Pham <jackp@codeaurora.org>,
bryan.odonoghue@linaro.org
Subject: Re: [PATCH 1/3] usb: typec: Add QCOM PMIC typec detection driver
Date: Thu, 11 Jun 2020 21:17:07 -0700 [thread overview]
Message-ID: <2d4f442e-74b6-f53f-0e1d-1d5dc94abc75@codeaurora.org> (raw)
In-Reply-To: <CAKgpwJWp9St4B1xuT5qAns1_NFPjd+2_gozv=0j-g7J42dbCPg@mail.gmail.com>
On 6/9/2020 7:27 PM, Jun Li wrote:
>> +static int qcom_pmic_typec_probe(struct platform_device *pdev)
>> +{
>> + struct device *dev = &pdev->dev;
>> + struct qcom_pmic_typec *qcom_usb;
>> + struct typec_capability *cap;
>> + const char *buf;
>> + int ret, irq, role;
>> +
>> + qcom_usb = kzalloc(sizeof(*qcom_usb), GFP_KERNEL);
>
> devm_kzalloc().
>
Hi Jun,
Thanks for the input. I have replaced with devm_kzalloc() as you
recommended.
>> + if (!qcom_usb)
>> + return -ENOMEM;
>> +
>> + qcom_usb->dev = dev;
>> +
>> + qcom_usb->regmap = dev_get_regmap(dev->parent, NULL);
>> + if (!qcom_usb->regmap) {
>> + dev_err(dev, "Failed to get regmap\n");
>> + return -EINVAL;
>> + }
>> +
>> + irq = platform_get_irq(pdev, 0);
>> + if (irq < 0) {
>> + dev_err(dev, "Failed to get CC irq\n");
>> + return -EINVAL;
>> + }
>> +
>> + ret = devm_request_irq(qcom_usb->dev, irq, qcom_pmic_typec_interrupt,
>> + IRQF_SHARED, "qcom-pmic-typec", qcom_usb);
>> + if (ret) {
>> + dev_err(&pdev->dev, "Could not request IRQ\n");
>> + return ret;
>> + }
>> +
>> + qcom_usb->fwnode = device_get_named_child_node(dev, "connector");
>> + if (!qcom_usb->fwnode)
>> + return -EINVAL;
>> +
>> + cap = kzalloc(sizeof(*cap), GFP_KERNEL);
>
> devm_kzalloc().
>
>> + if (!cap) {
>> + ret = -ENOMEM;
>> + goto err_put_node;
>> + }
>> +
>> + ret = fwnode_property_read_string(qcom_usb->fwnode, "power-role", &buf);
>> + if (!ret)
>> + role = typec_find_port_power_role(buf);
>
> if (role < 0)
>
Added a check for role <0, if so, set to SNK as well
>> + else
>> + role = TYPEC_PORT_SNK;
>> + cap->type = role;
>> +
>> + ret = fwnode_property_read_string(qcom_usb->fwnode, "data-role", &buf);
>> + if (!ret)
>> + role = typec_find_port_data_role(buf);
>
> if (role < 0)
>
Added a check for role <0, if so, set to UFP as well
>> + else
>> + role = TYPEC_PORT_UFP;
>> + cap->data = role;
>> +
>> + cap->prefer_role = -1;
>
> TYPEC_NO_PREFERRED_ROLE
>
Done.
>> + cap->fwnode = qcom_usb->fwnode;
>> + qcom_usb->port = typec_register_port(dev, cap);
>> + if (IS_ERR(qcom_usb->port)) {
>> + dev_err(dev, "Failed to register type c port %d\n",
>> + IS_ERR(qcom_usb->port));
>> + ret = PTR_ERR(qcom_usb->port);
>
> dev_err(dev, , ret)?
>
> Li Jun
Agreed. Thanks!
>> + goto err_put_node;
>> + }
>> +
>> + qcom_usb->cap = cap;
>> +
>> + qcom_usb->role_sw = fwnode_usb_role_switch_get(qcom_usb->fwnode);
>> + if (IS_ERR(qcom_usb->role_sw)) {
>> + if (PTR_ERR(qcom_usb->role_sw) != -EPROBE_DEFER)
>> + dev_err(dev, "failed to get role switch\n");
>> + ret = PTR_ERR(qcom_usb->role_sw);
>> + goto err_typec_port;
>> + }
>> +
>> + INIT_WORK(&qcom_usb->bh_work, qcom_pmic_typec_bh_work);
>> + platform_set_drvdata(pdev, qcom_usb);
>> + qcom_pmic_typec_typec_hw_init(qcom_usb);
>> +
>> + queue_work(system_power_efficient_wq, &qcom_usb->bh_work);
>> +
>> + return 0;
>> +
>> +err_typec_port:
>> + typec_unregister_port(qcom_usb->port);
>> +err_put_node:
>> + fwnode_handle_put(qcom_usb->fwnode);
>> +
>> + return ret;
>> +}
>> +
>> +static int qcom_pmic_typec_remove(struct platform_device *pdev)
>> +{
>> + struct qcom_pmic_typec *qcom_usb = platform_get_drvdata(pdev);
>> +
>> + cancel_work_sync(&qcom_usb->bh_work);
>> + usb_role_switch_set_role(qcom_usb->role_sw, USB_ROLE_NONE);
>> + qcom_pmic_typec_vbus_disable(qcom_usb);
>> +
>> + typec_unregister_port(qcom_usb->port);
>> + usb_role_switch_put(qcom_usb->role_sw);
>> + fwnode_handle_put(qcom_usb->fwnode);
>> +
>> + return 0;
>> +}
>> +
>> +static const struct of_device_id qcom_pmic_typec_table[] = {
>> + { .compatible = "qcom,pm8150b-usb-typec" },
>> + { },
>> +};
>> +MODULE_DEVICE_TABLE(of, qcom_pmic_typec_table);
>> +
>> +static struct platform_driver qcom_pmic_typec = {
>> + .driver = {
>> + .name = "qcom,pmic-typec",
>> + .of_match_table = qcom_pmic_typec_table,
>> + },
>> + .probe = qcom_pmic_typec_probe,
>> + .remove = qcom_pmic_typec_remove,
>> +};
>> +
>> +module_platform_driver(qcom_pmic_typec);
>> +
>> +MODULE_DESCRIPTION("QCOM PMIC USB type C driver");
>> +MODULE_LICENSE("GPL v2");
>> --
>> The Qualcomm Innovation Center, Inc. is a member of the Code Aurora Forum,
>> a Linux Foundation Collaborative Project
>>
--
The Qualcomm Innovation Center, Inc. is a member of the Code Aurora Forum,
a Linux Foundation Collaborative Project
next prev parent reply other threads:[~2020-06-12 4:17 UTC|newest]
Thread overview: 11+ messages / expand[flat|nested] mbox.gz Atom feed top
2020-06-09 20:58 [PATCH 0/3] Introduce PMIC based USB type C detection Wesley Cheng
2020-06-09 20:58 ` [PATCH 1/3] usb: typec: Add QCOM PMIC typec detection driver Wesley Cheng
2020-06-09 21:20 ` Randy Dunlap
2020-06-12 4:15 ` Wesley Cheng
2020-06-10 1:20 ` Jack Pham
2020-06-10 19:37 ` Bjorn Andersson
2020-06-12 4:19 ` Wesley Cheng
2020-06-10 2:27 ` Jun Li
2020-06-12 4:17 ` Wesley Cheng [this message]
2020-06-09 20:58 ` [PATCH 2/3] dt-bindings: usb: Add Qualcomm PMIC type C controller dt-binding Wesley Cheng
2020-06-09 20:58 ` [PATCH 3/3] arm64: boot: dts: qcom: pm8150b: Add node for USB type C block Wesley Cheng
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=2d4f442e-74b6-f53f-0e1d-1d5dc94abc75@codeaurora.org \
--to=wcheng@codeaurora.org \
--cc=agross@kernel.org \
--cc=bjorn.andersson@linaro.org \
--cc=bryan.odonoghue@linaro.org \
--cc=devicetree@vger.kernel.org \
--cc=gregkh@linuxfoundation.org \
--cc=heikki.krogerus@linux.intel.com \
--cc=jackp@codeaurora.org \
--cc=lijun.kernel@gmail.com \
--cc=linux-arm-msm@vger.kernel.org \
--cc=linux-kernel@vger.kernel.org \
--cc=linux-usb@vger.kernel.org \
--cc=mark.rutland@arm.com \
--cc=robh+dt@kernel.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox