From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1755573Ab0ICIKm (ORCPT ); Fri, 3 Sep 2010 04:10:42 -0400 Received: from mail.perches.com ([173.55.12.10]:1266 "EHLO mail.perches.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1754639Ab0ICIKk (ORCPT ); Fri, 3 Sep 2010 04:10:40 -0400 Subject: Re: [MeeGo-Dev][PATCH] Topcliff: Update PCH_I2C driver to 2.6.35 From: Joe Perches To: Masayuki Ohtak Cc: "Jean Delvare (PC drivers, core)" , "Ben Dooks (embedded platforms)" , Crane Cai , Samuel Ortiz , Linus Walleij , Ralf Baechle , srinidhi kasagar , linux-i2c@vger.kernel.org, linux-kernel@vger.kernel.org, yong.y.wang@intel.com, qi.wang@intel.com, andrew.chih.howe.khor@intel.com, arjan@linux.intel.com, Tomoya MORINAGA , Arnd Bergmann In-Reply-To: <4C80A089.508@dsn.okisemi.com> References: <4C80A089.508@dsn.okisemi.com> Content-Type: text/plain; charset="UTF-8" Date: Fri, 03 Sep 2010 01:10:37 -0700 Message-ID: <1283501437.1797.441.camel@Joe-Laptop> Mime-Version: 1.0 X-Mailer: Evolution 2.30.2 Content-Transfer-Encoding: 7bit Sender: linux-kernel-owner@vger.kernel.org List-ID: X-Mailing-List: linux-kernel@vger.kernel.org On Fri, 2010-09-03 at 16:15 +0900, Masayuki Ohtak wrote: [] > +#define pch_dbg(adap, fmt, arg...) \ > + dev_dbg(adap->pch_adapter.dev.parent, "%s :"fmt, __func__, ##arg) > + > +#define pch_err(adap, fmt, arg...) \ > + dev_err(adap->pch_adapter.dev.parent, "%s :"fmt, __func__, ##arg) > + > +#define pch_pci_err(pdev, fmt, arg...) \ > + dev_err(&pdev->dev, "%s :"fmt, __func__, ##arg) > +#define pch_pci_dbg(pdev, fmt, arg...) \ > + dev_dbg(&pdev->dev, "%s :"fmt, __func__, ##arg) OK, but it seems careless because the two types are not uniformly indented, there's a blank line between pch_dbg and pch_err, and the two pch_pci_ defines are in the reverse order without a blank line between them. I think it's better to use separate multiple strings that are concatentated by the preprocessor like: "%s :" fmt not "%s :"fmt Almost all code in kernel uses "%s: " to format __func__. Some use "%s(): ". I think "%s :" is unique. The rest of the logging messages look good. Some other comments: > + if ((pch_wait_for_xfer_complete(adap) == 0) && > + (pch_getack(adap) == 0)) { This would look better as: if ((pch_wait_for_xfer_complete(adap) == 0) && (pch_getack(adap) == 0)) { > + if ((pch_wait_for_xfer_complete(adap) == 0) > + && (pch_getack(adap) == 0)) { Here too. > + for (i = 0; i < PCH_MAX_CHN; i++) { > + while ((adap_info->pch_data[i].pch_xfer_in_progress)) { > + /* Wait until all channel transfers are completed */ > + msleep(1); > + } > + /* Disable the i2c interrupts */ > + pch_disbl_int(&adap_info->pch_data[i]); > + } Would it be better to disable all possible interrupts first or do you need to disable them in order? Something like: bool *disabled = kzalloc(PCH_MAX_CHN * sizeof(bool), GFP_KERNEL); /* * or a static with a memset, or check something * like pch_is_int_enabled(&adap_info->pch_data[i]) * then remove the else because the kzalloc couldn't fail. */ if (disabled) { bool alldone; do { alldone = true; for (i = 0; i < PCH_MAX_CHN; i++) { if (!adap_info->pch_data[i].pch_xfer_in_progress && !disabled[i])) { pch_disbl_int(&adap_info->pch_data[i]); disabled[i] = true; } else alldone = false; } if (!alldone) { /* Wait until all channel transfers are completed */ msleep(1); } } while (!alldone); kfree(disabled); /* remove the else if there's a static etc */ } else { for (i = 0; i < PCH_MAX_CHN; i++) { while ((adap_info->pch_data[i].pch_xfer_in_progress)) { /* Wait until all channel transfers are completed */ msleep(1); } /* Disable the i2c interrupts */ pch_disbl_int(&adap_info->pch_data[i]); } } cheers, Joe