From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: X-Cyrus-Session-Id: sloti22d1t05-3272487-1517354741-2-8827533787338083823 X-Sieve: CMU Sieve 3.0 X-Spam-known-sender: no X-Spam-score: 0.0 X-Spam-hits: BAYES_00 -1.9, HEADER_FROM_DIFFERENT_DOMAINS 0.001, RCVD_IN_DNSWL_HI -5, T_RP_MATCHES_RCVD -0.01, LANGUAGES en, BAYES_USED global, SA_VERSION 3.4.0 X-Spam-source: IP='209.132.180.67', Host='vger.kernel.org', Country='US', FromHeader='net', MailFrom='org' X-Spam-charsets: to='utf-8', cc='utf-8', plain='utf-8' X-Resolved-to: greg@kroah.com X-Delivered-to: greg@kroah.com X-Mail-from: linux-usb-owner@vger.kernel.org ARC-Seal: i=1; a=rsa-sha256; cv=none; d=messagingengine.com; s=arctest; t=1517354741; b=HnG3SgnuhzSLWC10v5Bsa2gadbFvenZ7fiJoJrugafEuS+K wmqIrrrYmvwy5r85HAwSDVYNwkLJ7d65vlhQiJdPkIyeftQ27/oZ+PcvNm89S0F7 d63n+kCbCJD/Jl1/LOcwpSmLieEst+jo4CJBtbr3YN+/xiSKd0sagLWru+A0RP2U oG7ivfucDYyeIeU/WypOj4+6fcVrtBV3Opsvp06aBWffyS4RwoQgF0ooVka0JHcX z/BxnL4qK3QPcRuTP0KYIHNSRZos3H0F3UZi8QgiZF+NQLl8oZfpCjZFrXtMBuBC 2GqjWbHcD7JRLuj25SwFpbiIMaHMvV7htXIQm/w== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d= messagingengine.com; h=date:from:to:cc:subject:message-id :references:mime-version:content-type:content-transfer-encoding :in-reply-to:sender:list-id; s=arctest; t=1517354741; bh=+5qSsi1 zvPSJhLf85SJ+ShIo9AOQepNy1Hgh1pveOw4=; b=oqxwYh8NrA2QSNhb5/NVD4e AMQBen1gZGeIvdUUxKW9PZoW2nTiB9OhfyO8rqazPpyr33qLpj2ajYpbc8hgyMnm FBDs0I6cT09MQxHX4SdRQg+/sGOzr9A5YXIx39S9BDBiLI9aq09IemIfw+EyYhSm 9Wrk6RKrYKsdHEQShqXaKxaBY7rxcA1X4aTVo+RL2EASYpXYdSNoJyTBQB3F9I2v LpOW6Sw8YVWTQkjyVq+MBVIsecBM/j2IJyff+GCFtjErsTcTfXwmdmRnnOYOObnF B8Ica6BoExSQV8nESreKw/5wlQurHuxtP4zxj0/LgOxjZQB0Za2KDERjpt71CjA= = ARC-Authentication-Results: i=1; mx2.messagingengine.com; arc=none (no signatures found); dkim=fail (message has been altered; 2048-bit rsa key sha256) header.d=gmail.com header.i=@gmail.com header.b=e0WFDm/+ x-bits=2048 x-keytype=rsa x-algorithm=sha256 x-selector=20161025; dmarc=none (p=none,has-list-id=yes,d=none) header.from=roeck-us.net; iprev=pass policy.iprev=209.132.180.67 (vger.kernel.org); spf=none smtp.mailfrom=linux-usb-owner@vger.kernel.org smtp.helo=vger.kernel.org; x-aligned-from=fail; x-google-dkim=fail (message has been altered; 2048-bit rsa key) header.d=1e100.net header.i=@1e100.net header.b=kS4fk20m; x-ptr=pass x-ptr-helo=vger.kernel.org x-ptr-lookup=vger.kernel.org; x-return-mx=pass smtp.domain=vger.kernel.org smtp.result=pass smtp_org.domain=kernel.org smtp_org.result=pass smtp_is_org_domain=no header.domain=roeck-us.net header.result=pass header_is_org_domain=yes Authentication-Results: mx2.messagingengine.com; arc=none (no signatures found); dkim=fail (message has been altered; 2048-bit rsa key sha256) header.d=gmail.com header.i=@gmail.com header.b=e0WFDm/+ x-bits=2048 x-keytype=rsa x-algorithm=sha256 x-selector=20161025; dmarc=none (p=none,has-list-id=yes,d=none) header.from=roeck-us.net; iprev=pass policy.iprev=209.132.180.67 (vger.kernel.org); spf=none smtp.mailfrom=linux-usb-owner@vger.kernel.org smtp.helo=vger.kernel.org; x-aligned-from=fail; x-google-dkim=fail (message has been altered; 2048-bit rsa key) header.d=1e100.net header.i=@1e100.net header.b=kS4fk20m; x-ptr=pass x-ptr-helo=vger.kernel.org x-ptr-lookup=vger.kernel.org; x-return-mx=pass smtp.domain=vger.kernel.org smtp.result=pass smtp_org.domain=kernel.org smtp_org.result=pass smtp_is_org_domain=no header.domain=roeck-us.net header.result=pass header_is_org_domain=yes Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1753830AbeA3XZZ (ORCPT ); Tue, 30 Jan 2018 18:25:25 -0500 Received: from mail-pg0-f67.google.com ([74.125.83.67]:40511 "EHLO mail-pg0-f67.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1753815AbeA3XZY (ORCPT ); Tue, 30 Jan 2018 18:25:24 -0500 X-Google-Smtp-Source: AH8x227sMrbpuRUAjRYStFfHFe0BOXF6ueI00wNkr/zQ9RaMDHkAbufKAYdUo2SAXixkOuuuJEx8ag== Date: Tue, 30 Jan 2018 15:25:21 -0800 From: Guenter Roeck To: =?utf-8?B?c2h1ZmFuX2xlZSjmnY7mm7jluIYp?= Cc: Heikki Krogerus , 'Jun Li' , ShuFanLee , =?utf-8?B?Y3lfaHVhbmco6buD5ZWf5Y6fKQ==?= , "linux-kernel@vger.kernel.org" , "linux-usb@vger.kernel.org" Subject: Re: [PATCH] USB TYPEC: RT1711H Type-C Chip Driver Message-ID: <20180130232521.GA19569@roeck-us.net> References: <20180119082218.GA22976@kuha.fi.intel.com> <25ced79e8ea84908bf6110a613ed81a2@ex1.rt.l> <20180119092413.GB22976@kuha.fi.intel.com> <20180119160235.GA21066@roeck-us.net> <20180122185034.GA26058@roeck-us.net> <20180129195752.GA24352@roeck-us.net> MIME-Version: 1.0 Content-Type: text/plain; charset=utf-8 Content-Disposition: inline Content-Transfer-Encoding: 8bit In-Reply-To: User-Agent: Mutt/1.5.24 (2015-08-30) Sender: linux-usb-owner@vger.kernel.org X-Mailing-List: linux-usb@vger.kernel.org X-getmail-retrieved-from-mailbox: INBOX X-Mailing-List: linux-kernel@vger.kernel.org List-ID: On Tue, Jan 30, 2018 at 01:21:01PM +0000, shufan_lee(李書帆) wrote: > Hi Guenter, > > For now, it looks like there are two ways to implement vendor data. It would be nice to hear your suggestion. > > 1. Set vendor data in the data field of of_device_id. > If I understand correctly, this would be the one more like you mentioned before. > In this case, tcpci_rt1711h_data needs to be defined inside tcpci.c or defined by other file(tcpci_rt1711h.c) but extern in tcpci.c. > > For example: > static struct tcpci_vendor_data tcpci_rt1711h_data = { > .init = rt1711h_init; > .irq_handler = rt1711h_irq_handler > }; > OR > extern struct tcpci_vendor_data tcpci_rt1711h_data; > > Then, put this structure here > static const struct of_device_id tcpci_of_match[] = { > { .compatible = "usb,tcpci", }, > { .compatible = "richtek,rt1711h", .data = (void *)&tcpci_rt1711h_data }, > {}, > }; > > For other vendors who want to handle vendor data also need to add these code inside tcpci.c. > We are not sure that's what you expect or not. > I would not say expect, but it is one possibility. Sure, it requires rt1711h_init and rt1711h_irq_handler to be public, and a bit of ifdefery, but it is simpler than option #2. Another option would be to instantiate tcpci from vendor drivers. In this case, there would be an exported registration function which would be called from tcpci_rt1711h.c:rt1711h_init(), similar to tcpm_register_port(). In that case, tcpci_rt1711h.c would have its own init function and compatible property. To do that, you would effectively split tcpci_probe() into two functions, tcpci_probe() and tcpci_register_port(), and call tcpci_register_port() from the probe function. int tcpci_register_port(struct i2c_client *client, const struct tcpci_vendor_data *data) { /* pretty much verything currently done in the probe function */ } EXPORT_SYMBOL(tcpci_register_port); static int tcpci_probe(struct i2c_client *client, const struct i2c_device_id *i2c_id) { return tcpci_register_port(client, NULL); } Maybe you can experiment with this and see if it makes sense. If not, you can still fall back to option #1. Thanks, Guenter From mboxrd@z Thu Jan 1 00:00:00 1970 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: base64 Subject: USB TYPEC: RT1711H Type-C Chip Driver From: Guenter Roeck Message-Id: <20180130232521.GA19569@roeck-us.net> Date: Tue, 30 Jan 2018 15:25:21 -0800 To: =?utf-8?B?c2h1ZmFuX2xlZSjmnY7mm7jluIYp?= Cc: Heikki Krogerus , 'Jun Li' , ShuFanLee , =?utf-8?B?Y3lfaHVhbmco6buD5ZWf5Y6fKQ==?= , "linux-kernel@vger.kernel.org" , "linux-usb@vger.kernel.org" List-ID: T24gVHVlLCBKYW4gMzAsIDIwMTggYXQgMDE6MjE6MDFQTSArMDAwMCwgc2h1ZmFuX2xlZSjmnY7m m7jluIYpIHdyb3RlOgo+IEhpIEd1ZW50ZXIsCj4gCj4gICBGb3Igbm93LCBpdCBsb29rcyBsaWtl IHRoZXJlIGFyZSB0d28gd2F5cyB0byBpbXBsZW1lbnQgdmVuZG9yIGRhdGEuIEl0IHdvdWxkIGJl IG5pY2UgdG8gaGVhciB5b3VyIHN1Z2dlc3Rpb24uCj4gCj4gICAxLiBTZXQgdmVuZG9yIGRhdGEg aW4gdGhlIGRhdGEgZmllbGQgb2Ygb2ZfZGV2aWNlX2lkLgo+IElmIEkgdW5kZXJzdGFuZCBjb3Jy ZWN0bHksIHRoaXMgd291bGQgYmUgdGhlIG9uZSBtb3JlIGxpa2UgeW91IG1lbnRpb25lZCBiZWZv cmUuCj4gSW4gdGhpcyBjYXNlLCB0Y3BjaV9ydDE3MTFoX2RhdGEgbmVlZHMgdG8gYmUgZGVmaW5l ZCBpbnNpZGUgdGNwY2kuYyBvciBkZWZpbmVkIGJ5IG90aGVyIGZpbGUodGNwY2lfcnQxNzExaC5j KSBidXQgZXh0ZXJuIGluIHRjcGNpLmMuCj4gCj4gRm9yIGV4YW1wbGU6Cj4gc3RhdGljIHN0cnVj dCB0Y3BjaV92ZW5kb3JfZGF0YSB0Y3BjaV9ydDE3MTFoX2RhdGEgPSB7Cj4gLmluaXQgPSBydDE3 MTFoX2luaXQ7Cj4gLmlycV9oYW5kbGVyID0gcnQxNzExaF9pcnFfaGFuZGxlcgo+IH07Cj4gT1IK PiBleHRlcm4gc3RydWN0IHRjcGNpX3ZlbmRvcl9kYXRhIHRjcGNpX3J0MTcxMWhfZGF0YTsKPiAK PiBUaGVuLCBwdXQgdGhpcyBzdHJ1Y3R1cmUgaGVyZQo+IHN0YXRpYyBjb25zdCBzdHJ1Y3Qgb2Zf ZGV2aWNlX2lkIHRjcGNpX29mX21hdGNoW10gPSB7Cj4geyAuY29tcGF0aWJsZSA9ICJ1c2IsdGNw Y2kiLCB9LAo+IHsgLmNvbXBhdGlibGUgPSAicmljaHRlayxydDE3MTFoIiwgLmRhdGEgPSAodm9p ZCAqKSZ0Y3BjaV9ydDE3MTFoX2RhdGEgfSwKPiB7fSwKPiB9Owo+IAo+IEZvciBvdGhlciB2ZW5k b3JzIHdobyB3YW50IHRvIGhhbmRsZSB2ZW5kb3IgZGF0YSBhbHNvIG5lZWQgdG8gYWRkIHRoZXNl IGNvZGUgaW5zaWRlIHRjcGNpLmMuCj4gV2UgYXJlIG5vdCBzdXJlIHRoYXQncyB3aGF0IHlvdSBl eHBlY3Qgb3Igbm90Lgo+IAoKSSB3b3VsZCBub3Qgc2F5IGV4cGVjdCwgYnV0IGl0IGlzIG9uZSBw b3NzaWJpbGl0eS4gU3VyZSwKaXQgcmVxdWlyZXMgcnQxNzExaF9pbml0IGFuZCBydDE3MTFoX2ly cV9oYW5kbGVyIHRvIGJlIHB1YmxpYywKYW5kIGEgYml0IG9mIGlmZGVmZXJ5LCBidXQgaXQgaXMg c2ltcGxlciB0aGFuIG9wdGlvbiAjMi4KCkFub3RoZXIgb3B0aW9uIHdvdWxkIGJlIHRvIGluc3Rh bnRpYXRlIHRjcGNpIGZyb20gdmVuZG9yIGRyaXZlcnMuCkluIHRoaXMgY2FzZSwgdGhlcmUgd291 bGQgYmUgYW4gZXhwb3J0ZWQgcmVnaXN0cmF0aW9uIGZ1bmN0aW9uIHdoaWNoCndvdWxkIGJlIGNh bGxlZCBmcm9tIHRjcGNpX3J0MTcxMWguYzpydDE3MTFoX2luaXQoKSwgc2ltaWxhciB0bwp0Y3Bt X3JlZ2lzdGVyX3BvcnQoKS4gSW4gdGhhdCBjYXNlLCB0Y3BjaV9ydDE3MTFoLmMgd291bGQgaGF2 ZSBpdHMKb3duIGluaXQgZnVuY3Rpb24gYW5kIGNvbXBhdGlibGUgcHJvcGVydHkuCgpUbyBkbyB0 aGF0LCB5b3Ugd291bGQgZWZmZWN0aXZlbHkgc3BsaXQgdGNwY2lfcHJvYmUoKSBpbnRvIHR3byBm dW5jdGlvbnMsCnRjcGNpX3Byb2JlKCkgYW5kIHRjcGNpX3JlZ2lzdGVyX3BvcnQoKSwgYW5kIGNh bGwgdGNwY2lfcmVnaXN0ZXJfcG9ydCgpCmZyb20gdGhlIHByb2JlIGZ1bmN0aW9uLgoKaW50IHRj cGNpX3JlZ2lzdGVyX3BvcnQoc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCwKCQkJY29uc3Qgc3Ry dWN0IHRjcGNpX3ZlbmRvcl9kYXRhICpkYXRhKQp7CgkvKiBwcmV0dHkgbXVjaCB2ZXJ5dGhpbmcg Y3VycmVudGx5IGRvbmUgaW4gdGhlIHByb2JlIGZ1bmN0aW9uICovCn0KRVhQT1JUX1NZTUJPTCh0 Y3BjaV9yZWdpc3Rlcl9wb3J0KTsKCnN0YXRpYyBpbnQgdGNwY2lfcHJvYmUoc3RydWN0IGkyY19j bGllbnQgKmNsaWVudCwKICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBzdHJ1Y3QgaTJjX2Rl dmljZV9pZCAqaTJjX2lkKQp7CglyZXR1cm4gdGNwY2lfcmVnaXN0ZXJfcG9ydChjbGllbnQsIE5V TEwpOwp9CgpNYXliZSB5b3UgY2FuIGV4cGVyaW1lbnQgd2l0aCB0aGlzIGFuZCBzZWUgaWYgaXQg bWFrZXMgc2Vuc2UuCklmIG5vdCwgeW91IGNhbiBzdGlsbCBmYWxsIGJhY2sgdG8gb3B0aW9uICMx LgoKVGhhbmtzLApHdWVudGVyCi0tLQpUbyB1bnN1YnNjcmliZSBmcm9tIHRoaXMgbGlzdDogc2Vu ZCB0aGUgbGluZSAidW5zdWJzY3JpYmUgbGludXgtdXNiIiBpbgp0aGUgYm9keSBvZiBhIG1lc3Nh Z2UgdG8gbWFqb3Jkb21vQHZnZXIua2VybmVsLm9yZwpNb3JlIG1ham9yZG9tbyBpbmZvIGF0ICBo dHRwOi8vdmdlci5rZXJuZWwub3JnL21ham9yZG9tby1pbmZvLmh0bWwK