# # Copyright (C) 2006 OpenWrt.org # # This is free software, licensed under the GNU General Public License v2. # See /LICENSE for more information. # include $(TOPDIR)/rules.mk include $(INCLUDE_DIR)/prereq.mk include $(INCLUDE_DIR)/host.mk PKG_NAME:=Build dependency define Require/non-root [ "$$(shell whoami)" != "root" ] endef $(eval $(call Require,non-root, \ Please do not compile as root. \ )) # Required for the toolchain define Require/working-make $(MAKE) -v | awk '($$$$1 == "GNU") && ($$$$2 = "Make") && ($$$$3 >= "3.81") { print "ok" }' | grep ok > /dev/null endef $(eval $(call Require,working-make, \ Please install GNU make v3.81 or later. (This version has bugs) \ )) define Require/case-sensitive-fs rm -f $(TMP_DIR)/test.* touch $(TMP_DIR)/test.fs [ \! -f $(TMP_DIR)/test.FS ] endef $(eval $(call Require,case-sensitive-fs, \ OpenWrt can only be built on a case-sensitive filesystem \ )) define Require/working-gcc echo 'int main(int argc, char **argv) { return 0; }' | \ gcc -x c -o $(TMP_DIR)/a.out - endef $(eval $(call Require,working-gcc, \ Please install the GNU C Compiler (gcc). \ )) define Require/working-g++ echo 'int main(int argc, char **argv) { return 0; }' | \ g++ -x c++ -o $(TMP_DIR)/a.out -lstdc++ - && \ $(TMP_DIR)/a.out endef $(eval $(call Require,working-g++, \ Please install the GNU C++ Compiler (g++). \ )) define Require/ncurses echo 'int main(int argc, char **argv) { initscr(); return 0; }' | \ gcc -include ncurses.h -x c -o $(TMP_DIR)/a.out -lncurses - endef $(eval $(call Require,ncurses, \ Please install ncurses. (Missing libncurses.so or ncurses.h) \ )) define Require/zlib echo 'int main(int argc, char **argv) { gzdopen(0, "rb"); return 0; }' | \ gcc -include zlib.h -x c -o $(TMP_DIR)/a.out -lz - endef $(eval $(call Require,zlib, \ Please install zlib. (Missing libz.so or zlib.h) \ )) $(eval $(call RequireCommand,gawk, \ Please install GNU awk. \ )) $(eval $(call RequireCommand,bison, \ Please install GNU bison. \ )) $(eval $(call RequireCommand,flex, \ Please install flex. \ )) $(eval $(call RequireCommand,unzip, \ Please install unzip. \ )) $(eval $(call RequireCommand,bzip2, \ Please install bzip2. \ )) $(eval $(call RequireCommand,patch, \ Please install patch. \ )) $(eval $(call RequireCommand,perl, \ Please install perl. \ )) $(eval $(call RequireCommand,wget, \ Please install wget. \ )) define Require/gnutar $(TAR) --version 2>&1 | grep GNU > /dev/null endef $(eval $(call Require,gnutar, \ Please install GNU tar. \ )) $(eval $(call RequireCommand,svn, \ Please install the subversion client. \ )) $(eval $(call RequireCommand,autoconf, \ Please install GNU autoconf. \ )) define Require/gnu-find $(FIND) $(TMP_DIR) -lname foo endef $(eval $(call Require,gnu-find, \ Please install GNU find \ )) c_bcm2708-Fix-clock-reference-counting.patch'>stats
path: root/target/linux/brcm2708/patches-3.18/0107-i2c_bcm2708-Fix-clock-reference-counting.patch
blob: 3da94273afc70058c829632cdd2f91a68cc5a151 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
From cf1b789e1a6873d9680156fac9f675a0f1cdd17b Mon Sep 17 00:00:00 2001
From: Phil Elwell <phil@raspberrypi.org>
Date: Thu, 5 Feb 2015 16:01:44 +0000
Subject: [PATCH 107/114] i2c_bcm2708: Fix clock reference counting

---
 drivers/i2c/busses/i2c-bcm2708.c | 12 ++++++++++--
 1 file changed, 10 insertions(+), 2 deletions(-)

--- a/drivers/i2c/busses/i2c-bcm2708.c
+++ b/drivers/i2c/busses/i2c-bcm2708.c
@@ -337,11 +337,17 @@ static int bcm2708_i2c_probe(struct plat
 		return PTR_ERR(clk);
 	}
 
+	err = clk_prepare_enable(clk);
+	if (err) {
+		dev_err(&pdev->dev, "could not enable clk: %d\n", err);
+		goto out_clk_put;
+	}
+
 	bcm2708_i2c_init_pinmode(pdev->id);
 
 	bi = kzalloc(sizeof(*bi), GFP_KERNEL);
 	if (!bi)
-		goto out_clk_put;
+		goto out_clk_disable;
 
 	platform_set_drvdata(pdev, bi);
 
@@ -412,6 +418,8 @@ out_iounmap:
 	iounmap(bi->base);
 out_free_bi:
 	kfree(bi);
+out_clk_disable:
+	clk_disable_unprepare(clk);
 out_clk_put:
 	clk_put(clk);
 	return err;
@@ -426,7 +434,7 @@ static int bcm2708_i2c_remove(struct pla
 	i2c_del_adapter(&bi->adapter);
 	free_irq(bi->irq, bi);
 	iounmap(bi->base);
-	clk_disable(bi->clk);
+	clk_disable_unprepare(bi->clk);
 	clk_put(bi->clk);
 	kfree(bi);