| .. | .. |
|---|
| 1 | +// SPDX-License-Identifier: GPL-2.0-only |
|---|
| 1 | 2 | /* |
|---|
| 2 | 3 | * Copyright (C) 2009 ST-Ericsson SA |
|---|
| 3 | 4 | * Copyright (C) 2009 STMicroelectronics |
|---|
| .. | .. |
|---|
| 7 | 8 | * |
|---|
| 8 | 9 | * Author: Srinidhi Kasagar <srinidhi.kasagar@stericsson.com> |
|---|
| 9 | 10 | * Author: Sachin Verma <sachin.verma@st.com> |
|---|
| 10 | | - * |
|---|
| 11 | | - * This program is free software; you can redistribute it and/or modify |
|---|
| 12 | | - * it under the terms of the GNU General Public License version 2, as |
|---|
| 13 | | - * published by the Free Software Foundation. |
|---|
| 14 | 11 | */ |
|---|
| 15 | 12 | #include <linux/init.h> |
|---|
| 16 | 13 | #include <linux/module.h> |
|---|
| .. | .. |
|---|
| 399 | 396 | * 2 whereas it is 3 for fast and fastplus mode of |
|---|
| 400 | 397 | * operation. TODO - high speed support. |
|---|
| 401 | 398 | */ |
|---|
| 402 | | - div = (dev->clk_freq > 100000) ? 3 : 2; |
|---|
| 399 | + div = (dev->clk_freq > I2C_MAX_STANDARD_MODE_FREQ) ? 3 : 2; |
|---|
| 403 | 400 | |
|---|
| 404 | 401 | /* |
|---|
| 405 | 402 | * generate the mask for baud rate counters. The controller |
|---|
| .. | .. |
|---|
| 423 | 420 | if (dev->sm > I2C_FREQ_MODE_FAST) { |
|---|
| 424 | 421 | dev_err(&dev->adev->dev, |
|---|
| 425 | 422 | "do not support this mode defaulting to std. mode\n"); |
|---|
| 426 | | - brcr2 = i2c_clk/(100000 * 2) & 0xffff; |
|---|
| 423 | + brcr2 = i2c_clk / (I2C_MAX_STANDARD_MODE_FREQ * 2) & 0xffff; |
|---|
| 427 | 424 | writel((brcr1 | brcr2), dev->virtbase + I2C_BRCR); |
|---|
| 428 | 425 | writel(I2C_FREQ_MODE_STANDARD << 4, |
|---|
| 429 | 426 | dev->virtbase + I2C_CR); |
|---|
| .. | .. |
|---|
| 952 | 949 | { |
|---|
| 953 | 950 | /* Default to 100 kHz if no frequency is given in the node */ |
|---|
| 954 | 951 | if (of_property_read_u32(np, "clock-frequency", &nmk->clk_freq)) |
|---|
| 955 | | - nmk->clk_freq = 100000; |
|---|
| 952 | + nmk->clk_freq = I2C_MAX_STANDARD_MODE_FREQ; |
|---|
| 956 | 953 | |
|---|
| 957 | 954 | /* This driver only supports 'standard' and 'fast' modes of operation. */ |
|---|
| 958 | | - if (nmk->clk_freq <= 100000) |
|---|
| 955 | + if (nmk->clk_freq <= I2C_MAX_STANDARD_MODE_FREQ) |
|---|
| 959 | 956 | nmk->sm = I2C_FREQ_MODE_STANDARD; |
|---|
| 960 | 957 | else |
|---|
| 961 | 958 | nmk->sm = I2C_FREQ_MODE_FAST; |
|---|
| .. | .. |
|---|
| 973 | 970 | struct i2c_vendor_data *vendor = id->data; |
|---|
| 974 | 971 | u32 max_fifo_threshold = (vendor->fifodepth / 2) - 1; |
|---|
| 975 | 972 | |
|---|
| 976 | | - dev = devm_kzalloc(&adev->dev, sizeof(struct nmk_i2c_dev), GFP_KERNEL); |
|---|
| 977 | | - if (!dev) { |
|---|
| 978 | | - dev_err(&adev->dev, "cannot allocate memory\n"); |
|---|
| 979 | | - ret = -ENOMEM; |
|---|
| 980 | | - goto err_no_mem; |
|---|
| 981 | | - } |
|---|
| 973 | + dev = devm_kzalloc(&adev->dev, sizeof(*dev), GFP_KERNEL); |
|---|
| 974 | + if (!dev) |
|---|
| 975 | + return -ENOMEM; |
|---|
| 976 | + |
|---|
| 982 | 977 | dev->vendor = vendor; |
|---|
| 983 | 978 | dev->adev = adev; |
|---|
| 984 | 979 | nmk_i2c_of_probe(np, dev); |
|---|
| .. | .. |
|---|
| 999 | 994 | |
|---|
| 1000 | 995 | dev->virtbase = devm_ioremap(&adev->dev, adev->res.start, |
|---|
| 1001 | 996 | resource_size(&adev->res)); |
|---|
| 1002 | | - if (!dev->virtbase) { |
|---|
| 1003 | | - ret = -ENOMEM; |
|---|
| 1004 | | - goto err_no_mem; |
|---|
| 1005 | | - } |
|---|
| 997 | + if (!dev->virtbase) |
|---|
| 998 | + return -ENOMEM; |
|---|
| 1006 | 999 | |
|---|
| 1007 | 1000 | dev->irq = adev->irq[0]; |
|---|
| 1008 | 1001 | ret = devm_request_irq(&adev->dev, dev->irq, i2c_irq_handler, 0, |
|---|
| 1009 | 1002 | DRIVER_NAME, dev); |
|---|
| 1010 | 1003 | if (ret) { |
|---|
| 1011 | 1004 | dev_err(&adev->dev, "cannot claim the irq %d\n", dev->irq); |
|---|
| 1012 | | - goto err_no_mem; |
|---|
| 1005 | + return ret; |
|---|
| 1013 | 1006 | } |
|---|
| 1014 | 1007 | |
|---|
| 1015 | | - dev->clk = devm_clk_get(&adev->dev, NULL); |
|---|
| 1008 | + dev->clk = devm_clk_get_enabled(&adev->dev, NULL); |
|---|
| 1016 | 1009 | if (IS_ERR(dev->clk)) { |
|---|
| 1017 | | - dev_err(&adev->dev, "could not get i2c clock\n"); |
|---|
| 1018 | | - ret = PTR_ERR(dev->clk); |
|---|
| 1019 | | - goto err_no_mem; |
|---|
| 1020 | | - } |
|---|
| 1021 | | - |
|---|
| 1022 | | - ret = clk_prepare_enable(dev->clk); |
|---|
| 1023 | | - if (ret) { |
|---|
| 1024 | | - dev_err(&adev->dev, "can't prepare_enable clock\n"); |
|---|
| 1025 | | - goto err_no_mem; |
|---|
| 1010 | + dev_err(&adev->dev, "could enable i2c clock\n"); |
|---|
| 1011 | + return PTR_ERR(dev->clk); |
|---|
| 1026 | 1012 | } |
|---|
| 1027 | 1013 | |
|---|
| 1028 | 1014 | init_hw(dev); |
|---|
| .. | .. |
|---|
| 1045 | 1031 | |
|---|
| 1046 | 1032 | ret = i2c_add_adapter(adap); |
|---|
| 1047 | 1033 | if (ret) |
|---|
| 1048 | | - goto err_no_adap; |
|---|
| 1034 | + return ret; |
|---|
| 1049 | 1035 | |
|---|
| 1050 | 1036 | pm_runtime_put(&adev->dev); |
|---|
| 1051 | 1037 | |
|---|
| 1052 | 1038 | return 0; |
|---|
| 1053 | | - |
|---|
| 1054 | | - err_no_adap: |
|---|
| 1055 | | - clk_disable_unprepare(dev->clk); |
|---|
| 1056 | | - err_no_mem: |
|---|
| 1057 | | - |
|---|
| 1058 | | - return ret; |
|---|
| 1059 | 1039 | } |
|---|
| 1060 | 1040 | |
|---|
| 1061 | | -static int nmk_i2c_remove(struct amba_device *adev) |
|---|
| 1041 | +static void nmk_i2c_remove(struct amba_device *adev) |
|---|
| 1062 | 1042 | { |
|---|
| 1063 | | - struct resource *res = &adev->res; |
|---|
| 1064 | 1043 | struct nmk_i2c_dev *dev = amba_get_drvdata(adev); |
|---|
| 1065 | 1044 | |
|---|
| 1066 | 1045 | i2c_del_adapter(&dev->adap); |
|---|
| .. | .. |
|---|
| 1069 | 1048 | clear_all_interrupts(dev); |
|---|
| 1070 | 1049 | /* disable the controller */ |
|---|
| 1071 | 1050 | i2c_clr_bit(dev->virtbase + I2C_CR, I2C_CR_PE); |
|---|
| 1072 | | - clk_disable_unprepare(dev->clk); |
|---|
| 1073 | | - if (res) |
|---|
| 1074 | | - release_mem_region(res->start, resource_size(res)); |
|---|
| 1075 | | - |
|---|
| 1076 | | - return 0; |
|---|
| 1077 | 1051 | } |
|---|
| 1078 | 1052 | |
|---|
| 1079 | 1053 | static struct i2c_vendor_data vendor_stn8815 = { |
|---|
| .. | .. |
|---|
| 1126 | 1100 | subsys_initcall(nmk_i2c_init); |
|---|
| 1127 | 1101 | module_exit(nmk_i2c_exit); |
|---|
| 1128 | 1102 | |
|---|
| 1129 | | -MODULE_AUTHOR("Sachin Verma, Srinidhi KASAGAR"); |
|---|
| 1103 | +MODULE_AUTHOR("Sachin Verma"); |
|---|
| 1104 | +MODULE_AUTHOR("Srinidhi KASAGAR"); |
|---|
| 1130 | 1105 | MODULE_DESCRIPTION("Nomadik/Ux500 I2C driver"); |
|---|
| 1131 | 1106 | MODULE_LICENSE("GPL"); |
|---|