public inbox for linux-arm-msm@vger.kernel.org
 help / color / mirror / Atom feed
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

  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