26
26
#include <linux/cpufreq.h>
27
27
#include <linux/gpio/consumer.h>
28
28
#include <linux/of.h>
29
- #include <linux/platform_data/i2c-davinci.h>
30
29
#include <linux/pm_runtime.h>
31
30
32
31
/* ----- global defines ----------------------------------------------- */
117
116
/* timeout for pm runtime autosuspend */
118
117
#define DAVINCI_I2C_PM_TIMEOUT 1000 /* ms */
119
118
119
+ #define DAVINCI_I2C_DEFAULT_BUS_FREQ 100
120
+
120
121
struct davinci_i2c_dev {
121
122
struct device * dev ;
122
123
void __iomem * base ;
@@ -132,13 +133,10 @@ struct davinci_i2c_dev {
132
133
#ifdef CONFIG_CPU_FREQ
133
134
struct notifier_block freq_transition ;
134
135
#endif
135
- struct davinci_i2c_platform_data * pdata ;
136
- };
137
-
138
- /* default platform data to use if not supplied in the platform_device */
139
- static struct davinci_i2c_platform_data davinci_i2c_platform_data_default = {
140
- .bus_freq = 100 ,
141
- .bus_delay = 0 ,
136
+ /* standard bus frequency (kHz) */
137
+ unsigned int bus_freq ;
138
+ /* Chip has a ICPFUNC register */
139
+ bool has_pfunc ;
142
140
};
143
141
144
142
static inline void davinci_i2c_write_reg (struct davinci_i2c_dev * i2c_dev ,
@@ -168,7 +166,6 @@ static inline void davinci_i2c_reset_ctrl(struct davinci_i2c_dev *i2c_dev,
168
166
169
167
static void i2c_davinci_calc_clk_dividers (struct davinci_i2c_dev * dev )
170
168
{
171
- struct davinci_i2c_platform_data * pdata = dev -> pdata ;
172
169
u16 psc ;
173
170
u32 clk ;
174
171
u32 d ;
@@ -212,16 +209,16 @@ static void i2c_davinci_calc_clk_dividers(struct davinci_i2c_dev *dev)
212
209
if (of_node && of_device_is_compatible (of_node , "ti,keystone-i2c" ))
213
210
d = 6 ;
214
211
215
- clk = ((input_clock / (psc + 1 )) / (pdata -> bus_freq * 1000 ));
212
+ clk = ((input_clock / (psc + 1 )) / (dev -> bus_freq * 1000 ));
216
213
/* Avoid driving the bus too fast because of rounding errors above */
217
- if (input_clock / (psc + 1 ) / clk > pdata -> bus_freq * 1000 )
214
+ if (input_clock / (psc + 1 ) / clk > dev -> bus_freq * 1000 )
218
215
clk ++ ;
219
216
/*
220
217
* According to I2C-BUS Spec 2.1, in FAST-MODE LOW period should be at
221
218
* least 1.3uS, which is not the case with 50% duty cycle. Driving HIGH
222
219
* to LOW ratio as 1 to 2 is more safe.
223
220
*/
224
- if (pdata -> bus_freq > 100 )
221
+ if (dev -> bus_freq > 100 )
225
222
clkl = (clk << 1 ) / 3 ;
226
223
else
227
224
clkl = (clk >> 1 );
@@ -255,8 +252,6 @@ static void i2c_davinci_calc_clk_dividers(struct davinci_i2c_dev *dev)
255
252
*/
256
253
static int i2c_davinci_init (struct davinci_i2c_dev * dev )
257
254
{
258
- struct davinci_i2c_platform_data * pdata = dev -> pdata ;
259
-
260
255
/* put I2C into reset */
261
256
davinci_i2c_reset_ctrl (dev , 0 );
262
257
@@ -274,8 +269,7 @@ static int i2c_davinci_init(struct davinci_i2c_dev *dev)
274
269
davinci_i2c_read_reg (dev , DAVINCI_I2C_CLKL_REG ));
275
270
dev_dbg (dev -> dev , "CLKH = %d\n" ,
276
271
davinci_i2c_read_reg (dev , DAVINCI_I2C_CLKH_REG ));
277
- dev_dbg (dev -> dev , "bus_freq = %dkHz, bus_delay = %d\n" ,
278
- pdata -> bus_freq , pdata -> bus_delay );
272
+ dev_dbg (dev -> dev , "bus_freq = %dkHz\n" , dev -> bus_freq );
279
273
280
274
281
275
/* Take the I2C module out of reset: */
@@ -309,12 +303,6 @@ static void davinci_i2c_unprepare_recovery(struct i2c_adapter *adap)
309
303
i2c_davinci_init (dev );
310
304
}
311
305
312
- static struct i2c_bus_recovery_info davinci_i2c_gpio_recovery_info = {
313
- .recover_bus = i2c_generic_scl_recovery ,
314
- .prepare_recovery = davinci_i2c_prepare_recovery ,
315
- .unprepare_recovery = davinci_i2c_unprepare_recovery ,
316
- };
317
-
318
306
static void davinci_i2c_set_scl (struct i2c_adapter * adap , int val )
319
307
{
320
308
struct davinci_i2c_dev * dev = i2c_get_adapdata (adap );
@@ -414,7 +402,6 @@ static int
414
402
i2c_davinci_xfer_msg (struct i2c_adapter * adap , struct i2c_msg * msg , int stop )
415
403
{
416
404
struct davinci_i2c_dev * dev = i2c_get_adapdata (adap );
417
- struct davinci_i2c_platform_data * pdata = dev -> pdata ;
418
405
u32 flag ;
419
406
u16 w ;
420
407
unsigned long time_left ;
@@ -424,10 +411,6 @@ i2c_davinci_xfer_msg(struct i2c_adapter *adap, struct i2c_msg *msg, int stop)
424
411
return - EADDRNOTAVAIL ;
425
412
}
426
413
427
- /* Introduce a delay, required for some boards (e.g Davinci EVM) */
428
- if (pdata -> bus_delay )
429
- udelay (pdata -> bus_delay );
430
-
431
414
/* set the target address */
432
415
davinci_i2c_write_reg (dev , DAVINCI_I2C_SAR_REG , msg -> addr );
433
416
@@ -758,8 +741,8 @@ static int davinci_i2c_probe(struct platform_device *pdev)
758
741
{
759
742
struct davinci_i2c_dev * dev ;
760
743
struct i2c_adapter * adap ;
761
- struct i2c_bus_recovery_info * rinfo ;
762
744
int r , irq ;
745
+ u32 prop ;
763
746
764
747
irq = platform_get_irq (pdev , 0 );
765
748
if (irq < 0 )
@@ -773,29 +756,15 @@ static int davinci_i2c_probe(struct platform_device *pdev)
773
756
774
757
dev -> dev = & pdev -> dev ;
775
758
dev -> irq = irq ;
776
- dev -> pdata = dev_get_platdata (& pdev -> dev );
777
759
platform_set_drvdata (pdev , dev );
778
760
779
- if (!dev -> pdata && pdev -> dev .of_node ) {
780
- u32 prop ;
781
-
782
- dev -> pdata = devm_kzalloc (& pdev -> dev ,
783
- sizeof (struct davinci_i2c_platform_data ), GFP_KERNEL );
784
- if (!dev -> pdata )
785
- return - ENOMEM ;
786
-
787
- memcpy (dev -> pdata , & davinci_i2c_platform_data_default ,
788
- sizeof (struct davinci_i2c_platform_data ));
789
- if (!of_property_read_u32 (pdev -> dev .of_node , "clock-frequency" ,
790
- & prop ))
791
- dev -> pdata -> bus_freq = prop / 1000 ;
792
-
793
- dev -> pdata -> has_pfunc =
794
- of_property_read_bool (pdev -> dev .of_node ,
795
- "ti,has-pfunc" );
796
- } else if (!dev -> pdata ) {
797
- dev -> pdata = & davinci_i2c_platform_data_default ;
798
- }
761
+ r = device_property_read_u32 (& pdev -> dev , "clock-frequency" , & prop );
762
+ if (r )
763
+ prop = DAVINCI_I2C_DEFAULT_BUS_FREQ ;
764
+
765
+ dev -> bus_freq = prop / 1000 ;
766
+
767
+ dev -> has_pfunc = device_property_present (& pdev -> dev , "ti,has-pfunc" );
799
768
800
769
dev -> clk = devm_clk_get (& pdev -> dev , NULL );
801
770
if (IS_ERR (dev -> clk ))
@@ -843,23 +812,8 @@ static int davinci_i2c_probe(struct platform_device *pdev)
843
812
adap -> timeout = DAVINCI_I2C_TIMEOUT ;
844
813
adap -> dev .of_node = pdev -> dev .of_node ;
845
814
846
- if (dev -> pdata -> has_pfunc )
815
+ if (dev -> has_pfunc )
847
816
adap -> bus_recovery_info = & davinci_i2c_scl_recovery_info ;
848
- else if (dev -> pdata -> gpio_recovery ) {
849
- rinfo = & davinci_i2c_gpio_recovery_info ;
850
- adap -> bus_recovery_info = rinfo ;
851
- rinfo -> scl_gpiod = devm_gpiod_get (& pdev -> dev , "scl" ,
852
- GPIOD_OUT_HIGH_OPEN_DRAIN );
853
- if (IS_ERR (rinfo -> scl_gpiod )) {
854
- r = PTR_ERR (rinfo -> scl_gpiod );
855
- goto err_unuse_clocks ;
856
- }
857
- rinfo -> sda_gpiod = devm_gpiod_get (& pdev -> dev , "sda" , GPIOD_IN );
858
- if (IS_ERR (rinfo -> sda_gpiod )) {
859
- r = PTR_ERR (rinfo -> sda_gpiod );
860
- goto err_unuse_clocks ;
861
- }
862
- }
863
817
864
818
adap -> nr = pdev -> id ;
865
819
r = i2c_add_numbered_adapter (adap );
0 commit comments