From patchwork Mon Apr 14 08:58:44 2014 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Sakari Ailus X-Patchwork-Id: 3978591 Return-Path: X-Original-To: patchwork-linux-media@patchwork.kernel.org Delivered-To: patchwork-parsemail@patchwork2.web.kernel.org Received: from mail.kernel.org (mail.kernel.org [198.145.19.201]) by patchwork2.web.kernel.org (Postfix) with ESMTP id 082D4BFF02 for ; Mon, 14 Apr 2014 09:01:58 +0000 (UTC) Received: from mail.kernel.org (localhost [127.0.0.1]) by mail.kernel.org (Postfix) with ESMTP id 401EE201B4 for ; Mon, 14 Apr 2014 09:01:57 +0000 (UTC) Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by mail.kernel.org (Postfix) with ESMTP id 629CB201DE for ; Mon, 14 Apr 2014 09:01:56 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1753590AbaDNJBx (ORCPT ); Mon, 14 Apr 2014 05:01:53 -0400 Received: from mga01.intel.com ([192.55.52.88]:41256 "EHLO mga01.intel.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1754534AbaDNJA7 (ORCPT ); Mon, 14 Apr 2014 05:00:59 -0400 Received: from fmsmga002.fm.intel.com ([10.253.24.26]) by fmsmga101.fm.intel.com with ESMTP; 14 Apr 2014 02:00:59 -0700 X-ExtLoop1: 1 X-IronPort-AV: E=Sophos;i="4.97,856,1389772800"; d="scan'208";a="520045607" Received: from paasikivi.fi.intel.com ([10.237.72.42]) by fmsmga002.fm.intel.com with ESMTP; 14 Apr 2014 02:00:57 -0700 Received: from nauris.fi.intel.com (nauris.localdomain [192.168.240.2]) by paasikivi.fi.intel.com (Postfix) with ESMTP id EA2F22003E for ; Mon, 14 Apr 2014 12:00:56 +0300 (EEST) Received: by nauris.fi.intel.com (Postfix, from userid 1000) id 44B6F200F4; Mon, 14 Apr 2014 12:01:22 +0300 (EEST) From: Sakari Ailus To: linux-media@vger.kernel.org Subject: [PATCH v2 19/21] smiapp-pll: Add quirk flag for sensors that effectively use double pix clks Date: Mon, 14 Apr 2014 11:58:44 +0300 Message-Id: <1397465926-29724-20-git-send-email-sakari.ailus@linux.intel.com> X-Mailer: git-send-email 1.8.3.2 In-Reply-To: <1397465926-29724-1-git-send-email-sakari.ailus@linux.intel.com> References: <1397465926-29724-1-git-send-email-sakari.ailus@linux.intel.com> Sender: linux-media-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-media@vger.kernel.org X-Spam-Status: No, score=-7.9 required=5.0 tests=BAYES_00, RCVD_IN_DNSWL_HI, RP_MATCHES_RCVD, UNPARSEABLE_RELAY autolearn=unavailable version=3.3.1 X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on mail.kernel.org X-Virus-Scanned: ClamAV using ClamSMTP Some sensors have effectively the double pixel (and other clocks) compared to calculations. The frequency of the bus is also affected similarly so take this into account when calculating pll_op_clock frequency. Signed-off-by: Sakari Ailus --- drivers/media/i2c/smiapp-pll.c | 10 ++++++++++ drivers/media/i2c/smiapp-pll.h | 6 ++++++ 2 files changed, 16 insertions(+) diff --git a/drivers/media/i2c/smiapp-pll.c b/drivers/media/i2c/smiapp-pll.c index 25abf01..7d45815 100644 --- a/drivers/media/i2c/smiapp-pll.c +++ b/drivers/media/i2c/smiapp-pll.c @@ -336,6 +336,10 @@ static int __smiapp_pll_calculate(struct device *dev, pll->pixel_rate_csi = pll->op_pix_clk_freq_hz * lane_op_clock_ratio; pll->pixel_rate_pixel_array = pll->vt_pix_clk_freq_hz; + if (pll->flags & SMIAPP_PLL_FLAG_PIX_CLOCK_DOUBLE) { + pll->pixel_rate_csi *= 2; + pll->pixel_rate_pixel_array *= 2; + } rval = bounds_check(dev, pll->pll_ip_clk_freq_hz, limits->min_pll_ip_freq_hz, @@ -427,6 +431,12 @@ int smiapp_pll_calculate(struct device *dev, */ if (pll->flags & SMIAPP_PLL_FLAG_OP_PIX_DIV_HALF) pll->pll_op_clk_freq_hz /= 2; + /* + * If it'll be multiplied by two in the end divide it now to + * avoid achieving double the desired clock. + */ + if (pll->flags & SMIAPP_PLL_FLAG_PIX_CLOCK_DOUBLE) + pll->pll_op_clk_freq_hz /= 2; /* Figure out limits for pre-pll divider based on extclk */ dev_dbg(dev, "min / max pre_pll_clk_div: %u / %u\n", diff --git a/drivers/media/i2c/smiapp-pll.h b/drivers/media/i2c/smiapp-pll.h index c6ad809..9eaac54 100644 --- a/drivers/media/i2c/smiapp-pll.h +++ b/drivers/media/i2c/smiapp-pll.h @@ -38,6 +38,12 @@ #define SMIAPP_PLL_FLAG_ALLOW_ODD_PRE_PLL_CLK_DIV (1 << 2) /* op pix div value is half of the bits-per-pixel value */ #define SMIAPP_PLL_FLAG_OP_PIX_DIV_HALF (1 << 3) +/* + * The effective vt and op pix clocks are twice as high as the + * calculated value. The limits are still against the regular limit + * values. + */ +#define SMIAPP_PLL_FLAG_PIX_CLOCK_DOUBLE (1 << 4) struct smiapp_pll { /* input values */