Received: by 2002:a05:6a10:22f:0:0:0:0 with SMTP id 15csp214483pxk; Wed, 9 Sep 2020 03:35:39 -0700 (PDT) X-Google-Smtp-Source: ABdhPJwbAJVp5m27tKt/0vSWXwJu5qNokC1N0YPkHci2xP+xQdseakMdgqPNDM0eqXbMQi9YX0XH X-Received: by 2002:a17:906:2a49:: with SMTP id k9mr3033336eje.117.1599647739223; Wed, 09 Sep 2020 03:35:39 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1599647739; cv=none; d=google.com; s=arc-20160816; b=Efmyju1J7VG4NcW8BVcqL1OkrketEvh8PeUTyI/L3lXgWZE7Opxd1NGy1zi0TPbnZV MWFN+gHpaPVkTzgrxGxzaZeb69C7yv7tV0mLxrh/VRMg6U5oGTqPBNhGzzGjeDLzHXLt eaVKVWR+oKIh7kk0ftf+LknOqaTPqHEa+JDp8Mrhy/AvGQwgQGaXUUROJIMRt+n7FGXb m1OQ8nfOhjlJXSU9H8lRcqlEduxDB1fpwr9GmQqrAHJI6LXMnnDqVtbwxP0QHzkUaMU2 nrTtO10t1N0fB9v3fGV2gUPIjXktOLTZmfCmWgQItXnF+uD6KP7iV+6ioxrbmWORSPmy vx/A== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:sender:organization:in-reply-to :content-disposition:mime-version:references:message-id:subject:cc :to:from:date:ironport-sdr:ironport-sdr; bh=/0oHwfIVTUKdq722bqaOtczfLOh50uFqoMg/Sas/Yd4=; b=LEDywUzJs21m27yjdpC2CwsPp1i9iSPIQvecydCBkG7HZsr49g7f96LCIn6wsxkUOF 31o+mKYehlVFUpLV3wcjBCfH6oJbUpLJl1nsmWFAZWK4gUZk7T1vyFSU4+nBq/jFFnI6 6+qTtsopTFkFdddwGY8mDCL14ElpswM0PBoIoG276e6IiONtwxM1Klu1Yj3wCCCU3QJS Q1jog183CwUjriEfD3aSdxJx5KGVI35TRe6bSlOtZttKrzmhlsvl9W0QLOZVgQWsHjk2 0jcegamWB6kxjKKl4g5mACqLJbs9Rsy5SjUCk/86nOqhpMi7eTpUEDl55ZEtPhHhEfRP 1Dcw== ARC-Authentication-Results: i=1; mx.google.com; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=fail (p=NONE sp=NONE dis=NONE) header.from=intel.com Return-Path: Received: from vger.kernel.org (vger.kernel.org. [23.128.96.18]) by mx.google.com with ESMTP id z25si1166437eje.701.2020.09.09.03.35.16; Wed, 09 Sep 2020 03:35:39 -0700 (PDT) Received-SPF: pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) client-ip=23.128.96.18; Authentication-Results: mx.google.com; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=fail (p=NONE sp=NONE dis=NONE) header.from=intel.com Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1729911AbgIIKeW (ORCPT + 99 others); Wed, 9 Sep 2020 06:34:22 -0400 Received: from mga02.intel.com ([134.134.136.20]:29695 "EHLO mga02.intel.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1729413AbgIIKda (ORCPT ); Wed, 9 Sep 2020 06:33:30 -0400 IronPort-SDR: sY0qwDgbUV11l4czCb3jlGrhPccjiAky7l9B7TyF/Ydn9lYyYXO4SEfe4+Roqs/EaMPOZwzWDH JDqEjVjAQTbg== X-IronPort-AV: E=McAfee;i="6000,8403,9738"; a="146024023" X-IronPort-AV: E=Sophos;i="5.76,409,1592895600"; d="scan'208";a="146024023" X-Amp-Result: SKIPPED(no attachment in message) X-Amp-File-Uploaded: False Received: from orsmga008.jf.intel.com ([10.7.209.65]) by orsmga101.jf.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 09 Sep 2020 03:33:25 -0700 IronPort-SDR: b0fZegHHelVqHvkD6wzmTiyf3as0QAL1ZKDn4jFpHjIu2BVakLrkUBUgTzqxmTXk4qp2d603Pr uEU9Erq3gGFg== X-ExtLoop1: 1 X-IronPort-AV: E=Sophos;i="5.76,409,1592895600"; d="scan'208";a="333774825" Received: from smile.fi.intel.com (HELO smile) ([10.237.68.40]) by orsmga008.jf.intel.com with ESMTP; 09 Sep 2020 03:33:20 -0700 Received: from andy by smile with local (Exim 4.94) (envelope-from ) id 1kFxPh-00FPwG-IJ; Wed, 09 Sep 2020 13:33:17 +0300 Date: Wed, 9 Sep 2020 13:33:17 +0300 From: Andy Shevchenko To: Rahul Tanwar Cc: jdelvare@suse.com, linux@roeck-us.net, p.zabel@pengutronix.de, linux-hwmon@vger.kernel.org, robh+dt@kernel.org, linux-kernel@vger.kernel.org, devicetree@vger.kernel.org, songjun.Wu@intel.com, cheol.yong.kim@intel.com, qi-ming.wu@intel.com, rtanwar@maxlinear.com Subject: Re: [PATCH 2/2] Add driver for Moortec MR75203 PVT controller Message-ID: <20200909103317.GL1891694@smile.fi.intel.com> References: MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: Organization: Intel Finland Oy - BIC 0357606-4 - Westendinkatu 7, 02160 Espoo Sender: linux-kernel-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org On Wed, Sep 09, 2020 at 02:52:05PM +0800, Rahul Tanwar wrote: > PVT controller (MR75203) is used to configure & control > Moortec embedded analog IP which contains temprature > sensor(TS), voltage monitor(VM) & process detector(PD) > modules. Add driver to support MR75203 PVT controller. ... > +#include > +#include > +#include > +#include > +#include I don't see anything special about OF here. Perhaps mod_devicetable.h property.h ? > +#include > +#include > +#include ... > +#define PVT_POLL_TIMEOUT 20000 Units? ... > + sys_freq = clk_get_rate(pvt->clk) / 1000000; HZ_PER_MHZ ? > + while (high >= low) { > + middle = DIV_ROUND_CLOSEST(low + high, 2); I'm wondering would it be better in the code like middle = (low + high + 1) / 2; > + key = DIV_ROUND_CLOSEST(sys_freq, middle); > + if (key > 514) { > + low = middle + 1; > + continue; > + } else if (key < 2) { > + high = middle - 1; > + continue; > + } > + > + break; > + } > + > + key = clamp_val(key, 2, 514) - 2; I guess above deserves a comment with formulas. ... > + regmap_write(p_map, SDIF_DISABLE, GENMASK(p_num - 1, 0)); For non-constants better would be BIT(p_num) - 1. ... > + regmap_write(v_map, SDIF_SMPL_CTRL, 0x0); > + regmap_write(v_map, SDIF_HALT, 0x0); > + regmap_write(v_map, SDIF_DISABLE, 0); In some you have 0, in some 0x0 over the file, can it be consistent? ... > +static struct regmap_config pvt_regmap_config = { > + .reg_bits = 32, > + .reg_stride = 4, > + .val_bits = 32, How do you use regmap's lock? > +}; ... > +static int pvt_get_regmap(struct platform_device *pdev, char *reg_name) > +{ > + struct device *dev = &pdev->dev; > + struct pvt_device *pvt = platform_get_drvdata(pdev); Can it be first line in definition block? > + struct regmap **reg_map; > + void __iomem *io_base; > + struct resource *res; > + > + if (!strcmp(reg_name, "common")) > + reg_map = &pvt->c_map; > + else if (!strcmp(reg_name, "ts")) > + reg_map = &pvt->t_map; > + else if (!strcmp(reg_name, "pd")) > + reg_map = &pvt->p_map; > + else if (!strcmp(reg_name, "vm")) > + reg_map = &pvt->v_map; > + else > + return -EINVAL; > + > + res = platform_get_resource_byname(pdev, IORESOURCE_MEM, reg_name); > + io_base = devm_ioremap_resource(dev, res); io_base = devm_platform_ioremap_resource_by_name(pdev, reg_name); ? > + if (IS_ERR(io_base)) > + return PTR_ERR(io_base); > + > + pvt_regmap_config.name = reg_name; Hmm... regmap API keeps it in devres. Why is there a copy? > + *reg_map = devm_regmap_init_mmio(dev, io_base, &pvt_regmap_config); > + if (IS_ERR(*reg_map)) { > + dev_err(dev, "failed to init register map\n"); > + return PTR_ERR(*reg_map); > + } > + > + return 0; > +} ... > + for (i = 0; i < num; i++) > + in_config[i] = HWMON_I_INPUT; memset32() ? -- With Best Regards, Andy Shevchenko