6161#define LPC_STR4 0x11C
6262
6363struct aspeed_kcs_bmc {
64+ struct kcs_bmc kcs_bmc ;
65+
6466 struct regmap * map ;
6567};
6668
@@ -69,9 +71,14 @@ struct aspeed_kcs_of_ops {
6971 int (* get_io_address )(struct platform_device * pdev );
7072};
7173
74+ static inline struct aspeed_kcs_bmc * to_aspeed_kcs_bmc (struct kcs_bmc * kcs_bmc )
75+ {
76+ return container_of (kcs_bmc , struct aspeed_kcs_bmc , kcs_bmc );
77+ }
78+
7279static u8 aspeed_kcs_inb (struct kcs_bmc * kcs_bmc , u32 reg )
7380{
74- struct aspeed_kcs_bmc * priv = kcs_bmc_priv (kcs_bmc );
81+ struct aspeed_kcs_bmc * priv = to_aspeed_kcs_bmc (kcs_bmc );
7582 u32 val = 0 ;
7683 int rc ;
7784
@@ -83,7 +90,7 @@ static u8 aspeed_kcs_inb(struct kcs_bmc *kcs_bmc, u32 reg)
8390
8491static void aspeed_kcs_outb (struct kcs_bmc * kcs_bmc , u32 reg , u8 data )
8592{
86- struct aspeed_kcs_bmc * priv = kcs_bmc_priv (kcs_bmc );
93+ struct aspeed_kcs_bmc * priv = to_aspeed_kcs_bmc (kcs_bmc );
8794 int rc ;
8895
8996 rc = regmap_write (priv -> map , reg , data );
@@ -92,7 +99,7 @@ static void aspeed_kcs_outb(struct kcs_bmc *kcs_bmc, u32 reg, u8 data)
9299
93100static void aspeed_kcs_updateb (struct kcs_bmc * kcs_bmc , u32 reg , u8 mask , u8 val )
94101{
95- struct aspeed_kcs_bmc * priv = kcs_bmc_priv (kcs_bmc );
102+ struct aspeed_kcs_bmc * priv = to_aspeed_kcs_bmc (kcs_bmc );
96103 int rc ;
97104
98105 rc = regmap_update_bits (priv -> map , reg , mask , val );
@@ -114,7 +121,7 @@ static void aspeed_kcs_updateb(struct kcs_bmc *kcs_bmc, u32 reg, u8 mask, u8 val
114121 */
115122static void aspeed_kcs_set_address (struct kcs_bmc * kcs_bmc , u16 addr )
116123{
117- struct aspeed_kcs_bmc * priv = kcs_bmc_priv (kcs_bmc );
124+ struct aspeed_kcs_bmc * priv = to_aspeed_kcs_bmc (kcs_bmc );
118125
119126 switch (kcs_bmc -> channel ) {
120127 case 1 :
@@ -148,7 +155,7 @@ static void aspeed_kcs_set_address(struct kcs_bmc *kcs_bmc, u16 addr)
148155
149156static void aspeed_kcs_enable_channel (struct kcs_bmc * kcs_bmc , bool enable )
150157{
151- struct aspeed_kcs_bmc * priv = kcs_bmc_priv (kcs_bmc );
158+ struct aspeed_kcs_bmc * priv = to_aspeed_kcs_bmc (kcs_bmc );
152159
153160 switch (kcs_bmc -> channel ) {
154161 case 1 :
@@ -325,17 +332,16 @@ static int aspeed_kcs_of_v2_get_io_address(struct platform_device *pdev)
325332static int aspeed_kcs_probe (struct platform_device * pdev )
326333{
327334 const struct aspeed_kcs_of_ops * ops ;
328- struct device * dev = & pdev -> dev ;
329335 struct aspeed_kcs_bmc * priv ;
330336 struct kcs_bmc * kcs_bmc ;
331337 struct device_node * np ;
332338 int rc , channel , addr ;
333339
334- np = dev -> of_node -> parent ;
340+ np = pdev -> dev . of_node -> parent ;
335341 if (!of_device_is_compatible (np , "aspeed,ast2400-lpc-v2" ) &&
336342 !of_device_is_compatible (np , "aspeed,ast2500-lpc-v2" ) &&
337343 !of_device_is_compatible (np , "aspeed,ast2600-lpc-v2" )) {
338- dev_err (dev , "unsupported LPC device binding\n" );
344+ dev_err (& pdev -> dev , "unsupported LPC device binding\n" );
339345 return - ENODEV ;
340346 }
341347 ops = of_device_get_match_data (& pdev -> dev );
@@ -346,20 +352,22 @@ static int aspeed_kcs_probe(struct platform_device *pdev)
346352 if (channel < 0 )
347353 return channel ;
348354
349- kcs_bmc = kcs_bmc_alloc (& pdev -> dev , sizeof (struct aspeed_kcs_bmc ), channel );
350- if (!kcs_bmc )
355+ addr = ops -> get_io_address (pdev );
356+ if (addr < 0 )
357+ return addr ;
358+
359+ priv = devm_kzalloc (& pdev -> dev , sizeof (* priv ), GFP_KERNEL );
360+ if (!priv )
351361 return - ENOMEM ;
352362
363+ kcs_bmc = & priv -> kcs_bmc ;
364+ kcs_bmc -> dev = & pdev -> dev ;
365+ kcs_bmc -> channel = channel ;
353366 kcs_bmc -> ioreg = ast_kcs_bmc_ioregs [channel - 1 ];
354367 kcs_bmc -> io_inputb = aspeed_kcs_inb ;
355368 kcs_bmc -> io_outputb = aspeed_kcs_outb ;
356369 kcs_bmc -> io_updateb = aspeed_kcs_updateb ;
357370
358- addr = ops -> get_io_address (pdev );
359- if (addr < 0 )
360- return addr ;
361-
362- priv = kcs_bmc_priv (kcs_bmc );
363371 priv -> map = syscon_node_to_regmap (pdev -> dev .parent -> of_node );
364372 if (IS_ERR (priv -> map )) {
365373 dev_err (& pdev -> dev , "Couldn't get regmap\n" );
@@ -372,29 +380,27 @@ static int aspeed_kcs_probe(struct platform_device *pdev)
372380 if (rc )
373381 return rc ;
374382
375- dev_set_drvdata ( dev , kcs_bmc );
383+ platform_set_drvdata ( pdev , priv );
376384
377385 aspeed_kcs_enable_channel (kcs_bmc , true);
378386
379- rc = misc_register ( & kcs_bmc -> miscdev );
387+ rc = kcs_bmc_add_device ( & priv -> kcs_bmc );
380388 if (rc ) {
381- dev_err ( dev , "Unable to register device \n" );
389+ dev_warn ( & pdev -> dev , "Failed to register channel %d: %d \n" , kcs_bmc -> channel , rc );
382390 return rc ;
383391 }
384392
385- dev_dbg (& pdev -> dev ,
386- "Probed KCS device %d (IDR=0x%x, ODR=0x%x, STR=0x%x)\n" ,
387- kcs_bmc -> channel , kcs_bmc -> ioreg .idr , kcs_bmc -> ioreg .odr ,
388- kcs_bmc -> ioreg .str );
393+ dev_info (& pdev -> dev , "Initialised channel %d at 0x%x\n" , kcs_bmc -> channel , addr );
389394
390395 return 0 ;
391396}
392397
393398static int aspeed_kcs_remove (struct platform_device * pdev )
394399{
395- struct kcs_bmc * kcs_bmc = dev_get_drvdata (& pdev -> dev );
400+ struct aspeed_kcs_bmc * priv = platform_get_drvdata (pdev );
401+ struct kcs_bmc * kcs_bmc = & priv -> kcs_bmc ;
396402
397- misc_deregister ( & kcs_bmc -> miscdev );
403+ kcs_bmc_remove_device ( kcs_bmc );
398404
399405 return 0 ;
400406}
0 commit comments